【dij变形】牛客练习赛93 C

news2024/11/23 8:12:11

C-点权_牛客练习赛93 (nowcoder.com)

题意:

 

思路:

重要的是在松弛的时候要满足什么条件才开始松弛

这里是用两个点来松弛一个点 

 

Code:

#include <bits/stdc++.h>
 
//#define int long long
 
using namespace std;
 
const int mxn=1e5+10;
const int mxv=1e5+10;
const int mxe=1e5+10;
const int mod=1e9+7;
const int Inf=0x3f3f3f3f;

struct ty{
    int to,next,w;
}edge[mxe<<2];

struct ty2{
    int x,dis;
    bool operator<(const ty2&oth)const{
        return oth.dis<dis;
    }
};

multiset<int> S[mxn];

priority_queue<ty2> Q;

int N,u,v,w;
int tot=0;
int head[mxn],in[mxn];
int vis[mxn],dis[mxn];

void add(int u,int v,int w){
    edge[tot].w=w;
    edge[tot].to=v;
    edge[tot].next=head[u];
    head[u]=tot++;
}
void G_init(){
    tot=0;
    for(int i=0;i<=N;i++) head[i]=-1;
}
int get(int u){
    return (*S[u].begin())+(*(++S[u].begin()));
}
void dij(){
    memset(dis,0x3f,sizeof(dis));
    memset(vis,0,sizeof(vis));
    for(int i=1;i<=N;i++){
        if(in[i]<=1){
            Q.push({i,0});
            dis[i]=0;
        }
        S[i].insert(Inf);
        S[i].insert(Inf);
    }
    while(!Q.empty()){
        auto u=Q.top();
        Q.pop();
        if(vis[u.x]) continue;
        vis[u.x]=1;
        for(int i=head[u.x];~i;i=edge[i].next){
            S[edge[i].to].insert(dis[u.x]+edge[i].w);
            if(dis[edge[i].to]>get(edge[i].to)){
                dis[edge[i].to]=get(edge[i].to);
                if(!vis[edge[i].to]) Q.push({edge[i].to,dis[edge[i].to]});
            }
        }
    }
}
void solve(){
    cin>>N;
    G_init();
    for(int i=1;i<=N-1;i++){
        cin>>u>>v>>w;
        add(u,v,w);
        add(v,u,w);
        in[u]++;
        in[v]++;
    }
    dij();
    for(int i=1;i<=N;i++){
        if(dis[i]==Inf) cout<<-1<<" \n"[i==N];
        else cout<<dis[i]<<" \n"[i==N];
    }
}
signed main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int __=1;//cin>>__;
    while(__--)solve();return 0;
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/744534.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android的内存泄漏分析

目录 1、内存详情 1.1、内存溢出 1.2 、内存泄漏 1.3、内存抖动 2、垃圾回收机制 2.1、垃圾回收算法&#xff08;标记--清除&#xff09; 2.2、垃圾回收算法&#xff08;标记--整理&#xff09; 2.3、复制算法 2.4、分代回收算法 3.GCRoot原理 3.1、可达性分析法…

VSCODE 设置同步network Error 问题

前言 这个问题等解决方法如下&#xff1a; 获取到github以及vscode-auth.github.com的ip&#xff0c;添加到host&#xff0c;随后使用命令行刷新host&#xff0c;重新认证即可 第一步&#xff0c;查看log文件&#xff0c; 打开 vscode&#xff0c;使用快捷指令ctrl(command)…

对象池介绍

对象池介绍 对象池是一种常见的优化技术&#xff0c;用于减少游戏运行时的内存分配和垃圾回收。对象池维护了一组已经创建的对象实例&#xff0c;这些对象可以被多次重复使用&#xff0c;而不需要每次都重新创建和销毁。对象池的主要优点是可以减少内存分配和垃圾回收的次数&a…

第一百零四天学习记录:C++核心:类和对象Ⅶ(五星重要)继承下

继承同名成员处理方式 1、访问子类同名成员&#xff0c;直接访问即可 2、访问父类同名成员&#xff0c;需要加作用域 #include<iostream> using namespace std; class Base { public:Base(){m_A 100;}int m_A;void func(){cout << "Base - func()调用"…

途乐证券-逆市拉升!这一板块超10股涨停

7月12日&#xff0c;A股商场全体走低&#xff0c;个股跌多涨少&#xff0c;厄尔尼诺的冲击波也“搅动”了A股商场&#xff0c;种业、虚拟电厂等概念股纷繁走强。轿车产业链个股继续活泼&#xff0c;超10股涨停。 2023年中期成绩预告仍如火如荼发表中&#xff0c;成绩“预喜”股…

SpringCloud入门实战(十三)Nacos服务注册与发现+配置管理详解

&#x1f4dd; 学技术、更要掌握学习的方法&#xff0c;一起学习&#xff0c;让进步发生 &#x1f469;&#x1f3fb; 作者&#xff1a;一只IT攻城狮 &#xff0c;关注我&#xff0c;不迷路 。 &#x1f490;学习建议&#xff1a;1、养成习惯&#xff0c;学习java的任何一个技术…

电脑网络最基本的常识简介(合集)

电脑网络最基本的常识简介 什么是HTML? HTML(Hyper Text Mark-up Language )即超文本标记语言&#xff0c;是 WWW 的描述语言&#xff0c;由 Tim Berners-lee提出。设计 HTML 语言的目的是为了能把存放在一台电脑中的文本或图形与另一台电脑中的文本或图形方便地联系在一起&a…

蚁群算法—ACA

&#x1f34e;道阻且长&#xff0c;行则将至。&#x1f353; 目录 一、蚁群算法简介&#x1f353;1.ACA基本思想2.ACA基本原理3.ACA基本步骤 二、算法求解TSP问题&#x1f34e;1.导入数据2.计算城市间相互距离3.初始化参数4.迭代寻找最佳路径5.结果显示End 一、蚁群算法简介&a…

软件 - 配置安装 Photoshop 的 RID 独立运行版本

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/131673004 Adobe Photoshop 是一款专业的图像处理软件,广泛应用于平面设计、摄影、插画、视频制作等领域,可以对各种格式的图片进行编辑、修饰、合成、优化等操作,创…

SpringBoot + Vue 实现酒店客房管理系统

目录 1 问题的提出 5 2系统开发的可行性研究 6 2.1 技术上可行性分析 6 系统现阶段的发展过程中&#xff0c;利用现有人力和物力是完全具备的能力开发出来 6 2.2 经济的可行性分析 6 2.3 操作可行性分析 6 3 需求分析 7 3.1 需求描述 7 3.2 功能需求分析 7 3.3 非功能需求分析…

JDBC学习笔记

目录 一、JDBC 1&#xff1a;为什么要学习JDBC技术 2、JDBC技术概述与理解 3、JDBC使用步骤分析 3.1、注册驱动 3.2 、获取连接 3.3、创建发送sql语句对象 3.4、发送sql语句 3.5、结果集解析 3.6、资源关闭 一、JDBC 1&#xff1a;为什么要学习JDBC技术 1、Java和数…

【雕爷学编程】Arduino动手做(117)---P10V706LED屏模组3

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

亚马逊买家号如何绑定信用卡

要在亚马逊上绑定信用卡作为买家号的支付方式&#xff0c;请按照以下步骤进行操作&#xff1a; 1、登录亚马逊账户&#xff1a;使用您的亚马逊账户用户名和密码登录到亚马逊网站。 2、导航至"我的账户"&#xff1a;在页面右上角&#xff0c;将鼠标悬停在"你好…

安装使用docker-compose

Docker-Compose项目是Docker官方的开源项目&#xff0c;负责实现对Docker容器集群的快速编排 Docker-Compose将所管理的容器分为三层&#xff0c;分别是工程&#xff08;project&#xff09;&#xff0c;服务&#xff08;service&#xff09;以及容器&#xff08;container&…

【单周期CPU】LoongArch | LA32R | 二选一控制器MUX | 数据通路

前言&#xff1a;本章内容主要是演示在vivado下利用Verilog语言进行单周期简易CPU的设计。一步一步自己实现模型机的设计。本章先介绍单周期简易CPU中数据通路的设计。 &#x1f4bb;环境&#xff1a;一台内存4GB以上&#xff0c;装有64位Windows操作系统和Vivado 2017.4以上版…

华为OD机试真题 Java 实现【矩阵中非1的元素个数】【2023 B卷 200分】,附详细解题思路

目录 一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明先将[0,0]位置的值变为1。第一次同化&#xff1a;第二次同化&#xff1a; 大家好&#xff0c;我是哪吒。 一、题目描述 存在一个m*n的二维数组&#xff0c;其成员取…

小程序项目时间选择器用法

项目需求是要实现这种形式, 但是相信大家都试了各种插件,都不太合适,uView框架也不能满足自己的需要; 推荐使用:uview-ui-plus 基本上小程序遇到的单选多选 日期 省市区 都可以完美的实现,可以通过插件市场安装使用 但是要实现ui给的原型图 还需要做一下调整 弹性布局给两个选…

Linux查找关键字出现的位置

在Linux中&#xff0c;您可以使用以下命令来查找文件中关键字出现的位置&#xff1a; grep -rnw /path/to/search -e keyword其中&#xff1a; - -r 递归地搜索指定路径下的所有子目录。 - -n 显示匹配行的行号。 - -w 完整匹配单词&#xff0c;而不是部分匹配。 - /path/to/s…

pandas 重复数据处理详解

概要 重复值处理主要涉及两个部分&#xff0c;一个是找出重复值&#xff0c;第二个是删除重复值&#xff0c;也就是根据自己设定的条件进行删除操作。本次来介绍关于重复数据处理的几个常用方法。 定位重复值 对于重复值&#xff0c;我们首先需要查看这些重复值是什么样的形式…