BZOJ1576 (最短路+并查集)
#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 (最短路+并查集)的更多相关文章
- 【BZOJ1576】[Usaco2009 Jan]安全路经Travel 最短路+并查集
[BZOJ1576][Usaco2009 Jan]安全路经Travel Description Input * 第一行: 两个空格分开的数, N和M * 第2..M+1行: 三个空格分开的数a_i, ...
- BZOJ1576: [Usaco2009 Jan]安全路经Travel(最短路 并查集)
题意 给你一张无向图,保证从1号点到每个点的最短路唯一.对于每个点求出删掉号点到它的最短路上的最后一条边(就是这条路径上与他自己相连的那条边)后1号点到它的最短路的长度 Sol emmm,考场上想了个 ...
- bzoj3694: 最短路(树链剖分/并查集)
bzoj1576的帮我们跑好最短路版本23333(双倍经验!嘿嘿嘿 这题可以用树链剖分或并查集写.树链剖分非常显然,并查集的写法比较妙,涨了个姿势,原来并查集的路径压缩还能这么用... 首先对于不在最 ...
- 【BZOJ-1576】安全路径Travel Dijkstra + 并查集
1576: [Usaco2009 Jan]安全路经Travel Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1044 Solved: 363[Sub ...
- BZOJ4699 树上的最短路(最短路径+dfs序+线段树+堆+并查集)
首先一般化的将下水道和塌陷看成一个东西.注意到在从源点出发的所有需要使用某条下水道的最短路径中,该下水道只会被使用一次,该下水道第一个被访问的点相同,且只会在第一个访问的点使用该下水道.这个第一个访问 ...
- 洛谷P4768 [NOI2018]归程(可持久化并查集,最短路)
闲话 一个蒟蒻,在网络同步赛上进行了这样的表演-- T2组合计数不会,T3字符串数据结构不会,于是爆肝T1 一开始以为整个地图都有车,然后写了2h+的树套树,终于发现样例过不去 然后写可持久化并查集D ...
- 【bzoj5049】[Lydsy九月月赛]导航系统 并查集+双向BFS最短路
题目描述 给你一张 $n$ 个点 $m$ 条边的随机图,边权为1.$k$ 次询问两点间最短路,不连通则输出-1. 输入 第一行包含3个正整数n,m,k(2<=n<=100000,1< ...
- 2015多校第6场 HDU 5361 并查集,最短路
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5361 题意:有n个点1-n, 每个点到相邻点的距离是1,然后每个点可以通过花费c[i]的钱从i点走到距 ...
- 【BZOJ4144】[AMPPZ2014]Petrol(最短路+最小生成树+并查集)
Description 给定一个n个点.m条边的带权无向图,其中有s个点是加油站. 每辆车都有一个油量上限b,即每次行走距离不能超过b,但在加油站可以补满. q次询问,每次给出x,y,b,表示出发点是 ...
随机推荐
- OC 继承子类对象调用方法机制 子类对象访问父类中的实例变量
在继承中,子类对象如何调用到正确方法的机制 每一个Objective - C对象都有一个隐藏的指针指向类的代码,当向一个对象发送消息的时候,当前的对象会首先在当前类里去查找相应的方法,如果找到的话,直 ...
- Java 集合系列 06 Stack详细介绍(源码解析)和使用示例
java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...
- 用户上网的基本流程图与DNS解析原理
1.用户上网发送请求,首先确认本地的hosts中是否含有域名,有则进行ip访问,如果没有呢?看本机的display缓存中有没有访问网站的ip,有就直接去访问 那么如果本地的hosts和缓存都没有呢?这 ...
- 发送广播BroadcastReceiver
import android.os.Bundle;import android.app.Activity;import android.content.Intent;import android.vi ...
- AngularJS 指令实践
概述 如果你写过AngularJS的应用,那么你一定已经使用过指令,不管你有没有意识到.你肯定已经用过简单的指令,比如 ng-mode, ng-repeat, ng-show等.这些指令都赋予DOM元 ...
- 2014北邮新生归来赛解题报告d-e
D: 399. Who Is Joyful 时间限制 3000 ms 内存限制 65536 KB 题目描述 There are several little buddies standing in a ...
- IP数据报的格式
1. IP数据报首部的固定部分中的各字段 ①版本:占4位,指IP协议的版本.通信双方使用的 IP协议版本必须一致.日前广泛使用的 IP协议版本号为 4 (即 IPv4). IPv6 目前还处于起步阶段 ...
- wp8.1 C#技巧: 计时器
public MainPage() { this.InitializeComponent(); this.timer = new DispatcherTimer();//新建委托时间实例 timer. ...
- OCR技术
"起初我写这篇教程是在情人节,OCR可以带给你一整年的爱". 你之前肯定已经见过,OCR技术被应用于在平板电脑上将扫描文件处理成手写字迹,还被应用于谷歌最近添加到他们的Transl ...
- java的动态绑定和静态绑定
首先是方法的参数是父类对象,传入子类对象是否可行然后引出Parent p = new Children();这句代码不是很理解,google的过程中引出向上转型要理解向上转型又引出了动态绑定从动态绑定 ...