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,表示出发点是 ...
随机推荐
- Trapping Rain Water [LeetCode]
Problem Description: http://oj.leetcode.com/problems/trapping-rain-water/ Basic idea: Get the index ...
- 源码编译Chrome
官网描述 http://www.chromium.org/developers/how-tos/build-instructions-windows 为啥还要写这篇博客 太久没在这里写博客 Chrom ...
- 7款适用老旧设备并对初学者非常友好的轻量级Linux发行版
我们由从 7 到 1 的顺序向大家介绍. 7. Linux Lite 正如其名,Linux Lite 是 Linux 发行版的一个轻量级版本,用户并不需要强大的硬件就可以将它跑起来,而且其使用非常简单 ...
- Struts+Spring+Hibernate整合入门详解
Java 5.0 Struts 2.0.9 Spring 2.0.6 Hibernate 3.2.4 作者: Liu Liu 转载请注明出处 基本概念和典型实用例子. 一.基本概念 St ...
- 在完成一个异步任务后取消剩余任务(C#)
完整实例 using System;using System.Collections.Generic;using System.Linq;using System.Text;using System. ...
- jquery返回上一页面
window.location.href=document.referrer; 返回然后刷新 window.history.back(-1); 返回不刷新
- 微信支付官方SDK V3 .NET版的坑
但是支付成功后却不能正确的执行支付结果js回调函数.看看其页面的点击事件是放在asp:Button上面的.我们知道在asp.net webform中,按钮的点击是有页面回调后台的.也就是其实点击了之后 ...
- 10 notorious computer virus
The history of computer virus is the same as computer history. With more and more powerful computers ...
- bzoj 1997: [Hnoi2010]Planar
#include<cstdio> #include<cstring> #include<iostream> #define M 20005 #define N 20 ...
- MVC 3个重要的描述对象之ControllerDescriptor
1.ControllerDescriptor 1.1 ReflectedControllerDescriptor public class HomeController : Controller { ...