#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#define inline __attribute__((optimize("O2")))
using namespace std; #define maxn 100008
#define maxm 1000008
#define INF 2000000000
#define pa pair<int,int> struct line{
int u,v,w,nt;
}eg[maxm],E[maxm],e[maxm]; int lt[maxn],fa[maxn],n,m,sum=,num=,f[maxn],ans[maxn];
int d[maxn],pd[maxn]; inline void add(int u,int v,int w){
eg[++sum].v=v; eg[sum].w=w; eg[sum].nt=lt[u]; lt[u]=sum;
}
inline void read(int &x){
char ch;
for (ch=getchar();ch<''||ch>'';ch=getchar()); x=ch-;
for (ch=getchar();ch>=''&&ch<='';ch=getchar()) x=x*+ch-;
} /*inline void spfa(){
for (int i=1;i<=n;i++) d[i]=INF;
queue<int> Q;
memset(pd,0,sizeof(pd));
pd[1]=1; d[1]=0; Q.push(1);
while (!Q.empty()){
int u=Q.front();
for (int i=lt[u];i;i=eg[i].nt){
int v=eg[i].v;
if (d[u]+eg[i].w<d[v]){
d[v]=d[u]+eg[i].w;
fa[v]=u;
if (!pd[v]){
Q.push(v);
pd[v]=1;
}
}
}
pd[u]=0;
Q.pop();
}
}*/ inline void dijkstra(){
priority_queue<pa,vector<pa>,greater<pa> > Q;
memset(pd,,sizeof(pd));
for (int i=;i<=n;i++) d[i]=INF;
d[]=; Q.push(make_pair(,));
while (!Q.empty()){
int u=Q.top().second; Q.pop();
if (pd[u]) continue; pd[u]=;
for (int i=lt[u];i;i=eg[i].nt)
if (d[u]+eg[i].w<d[eg[i].v]){
d[eg[i].v]=d[u]+eg[i].w;
fa[eg[i].v]=u;
Q.push(make_pair(d[eg[i].v],eg[i].v));
}
}
} inline bool cmp(line i,line j){
return i.w<j.w;
} inline int find(int x){ return f[x]==x?x:f[x]=find(f[x]); } inline void work(int u,int v,int w){
int x=find(u),y=find(v);
while (x!=y){
if (d[x]<d[y]) swap(x,y);
ans[x]=w-d[x];
num++;
f[x]=fa[x];
x=find(f[x]);
}
} inline int main(){
read(n); read(m);
int x,y,z;
for (int i=;i<=m;i++){
read(x); read(y); read(z);
add(x,y,z); add(y,x,z);
e[i].u=x; e[i].v=y; e[i].w=z;
}
dijkstra();
int cnt=;
for (int i=;i<=m;i++){
int u=e[i].u,v=e[i].v,w=e[i].w;
if (fa[u]!=v && fa[v]!=u){
E[++cnt].u=u;
E[cnt].v=v;
E[cnt].w=d[u]+d[v]+w;
}
}
sort(E+,E+cnt+,cmp);
for (int i=;i<=n;i++) { ans[i]=-; f[i]=i; }
for (int i=;i<=cnt;i++){
work(E[i].u,E[i].v,E[i].w);
if (num==n-) break;
}
for (int i=;i<=n;i++) printf("%d\n",ans[i]);
}

BZOJ1576 (最短路+并查集)的更多相关文章

  1. 【BZOJ1576】[Usaco2009 Jan]安全路经Travel 最短路+并查集

    [BZOJ1576][Usaco2009 Jan]安全路经Travel Description Input * 第一行: 两个空格分开的数, N和M * 第2..M+1行: 三个空格分开的数a_i, ...

  2. BZOJ1576: [Usaco2009 Jan]安全路经Travel(最短路 并查集)

    题意 给你一张无向图,保证从1号点到每个点的最短路唯一.对于每个点求出删掉号点到它的最短路上的最后一条边(就是这条路径上与他自己相连的那条边)后1号点到它的最短路的长度 Sol emmm,考场上想了个 ...

  3. bzoj3694: 最短路(树链剖分/并查集)

    bzoj1576的帮我们跑好最短路版本23333(双倍经验!嘿嘿嘿 这题可以用树链剖分或并查集写.树链剖分非常显然,并查集的写法比较妙,涨了个姿势,原来并查集的路径压缩还能这么用... 首先对于不在最 ...

  4. 【BZOJ-1576】安全路径Travel Dijkstra + 并查集

    1576: [Usaco2009 Jan]安全路经Travel Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1044  Solved: 363[Sub ...

  5. BZOJ4699 树上的最短路(最短路径+dfs序+线段树+堆+并查集)

    首先一般化的将下水道和塌陷看成一个东西.注意到在从源点出发的所有需要使用某条下水道的最短路径中,该下水道只会被使用一次,该下水道第一个被访问的点相同,且只会在第一个访问的点使用该下水道.这个第一个访问 ...

  6. 洛谷P4768 [NOI2018]归程(可持久化并查集,最短路)

    闲话 一个蒟蒻,在网络同步赛上进行了这样的表演-- T2组合计数不会,T3字符串数据结构不会,于是爆肝T1 一开始以为整个地图都有车,然后写了2h+的树套树,终于发现样例过不去 然后写可持久化并查集D ...

  7. 【bzoj5049】[Lydsy九月月赛]导航系统 并查集+双向BFS最短路

    题目描述 给你一张 $n$ 个点 $m$ 条边的随机图,边权为1.$k$ 次询问两点间最短路,不连通则输出-1. 输入 第一行包含3个正整数n,m,k(2<=n<=100000,1< ...

  8. 2015多校第6场 HDU 5361 并查集,最短路

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5361 题意:有n个点1-n, 每个点到相邻点的距离是1,然后每个点可以通过花费c[i]的钱从i点走到距 ...

  9. 【BZOJ4144】[AMPPZ2014]Petrol(最短路+最小生成树+并查集)

    Description 给定一个n个点.m条边的带权无向图,其中有s个点是加油站. 每辆车都有一个油量上限b,即每次行走距离不能超过b,但在加油站可以补满. q次询问,每次给出x,y,b,表示出发点是 ...

随机推荐

  1. Objective-C:Foundation框架-结构体

    在Foundation中定义了很多常用结构体类型来简化我们的日常开发,这些结构体完全采用Objective-C定义,和我们自己定义的结构体没有任何区别,之所以由框架为我们提供完全是为了简化我们的开发. ...

  2. sublime text2 解决中文乱码

    打开Preferences菜单,并选择 Browse Packages… 系统会打开Sublime Text 2的Packages文件夹,回到上一级菜单,然后打开Installed Packages文 ...

  3. 通过class和id获取DOM元素的区别

    1.通过id获取DOM元素的方法:document.getElementById("id名") 2.通过class获取DOM元素的方法:document.getElementsBy ...

  4. Octopus系列之HttpCustom2.0模板引擎的处理,一个bug的分析

    实现的目标是: 1.实现手机和PC模板请求的区分:使得来自两种不同设备请求的时候,各自路由到不同的目录中去 2.保持只有一个引擎实例对象 最后发现一个bug就是,当我从PC访问时初始化了PC的目录,呈 ...

  5. eclipse 连接 mysql

    1.下载驱动. 2.eclipse->add extend jars -> 添加驱动. 3.测试: 在mysql 建立数据库和表,在eclipse 里对数据库进行操作. 代码: mysql ...

  6. R中rJava包载入时报错的问题

    今天安装XLConnect包,安装后无法library(XLConnect)载入,看报错问题应该出在rJava上,找到了下面的解决办法: if (Sys.getenv("JAVA_HOME& ...

  7. C#拉姆达(=>)表达式

    前言: 之前小猪曾经分享过自己对C#委托的一点理解 其实在使用委托的过程中我们会大量的使用拉姆达(=>)表达式 介绍: "Lambda表达式"是一个匿名函数,是一种高效的类似 ...

  8. js方法控制html表格的增加和删除

    <!DOCTYPE html> <html> <head> <title>linshi3.html</title> <meta htt ...

  9. java转义字符探究恢复

    今天工作的时候,遇到了个奇怪的问题,是关于字符串转义与替换的.最后终于解决了,特总结下. 小demo, package com.westward; public class Demo { /** * ...

  10. Flux Demo解析

    最近学习了阮一峰老师的博文 "Flux入门教程",博文中详细介绍了Flux框架和Controller view模式,并提供了Demo,受益匪浅. 现特参考阮老师的Demo,绘制了一 ...