【bzoj1576/Usaco2009 Jan】安全路经Travel——dijkstra+并查集
2017-09-29 06:44
405 查看
Description
#include<cstdio> #include<cstring> #include<algorithm> #include<queue> #define mem(a,p) memset(a,p,sizeof(a)) const int N=1e5+10,M=2e5+10; using std::swap; using std::sort; struct node{int fr,to,ne,w;}e[M*2],d[M*2]; struct point{ int d,id; bool operator <(const point&p)const {return p.d<d;} }; int n,an ,m,first ,dis ,tot=0,fa ,dep ,cnt=0; std::priority_queue<point>q; int read(){ int ans=0,f=1;char c=getchar(); while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();} while(c>='0'&&c<='9'){ans=ans*10+c-48;c=getchar();} return ans*f; } bool cmp(node a,node b){return a.w<b.w;} void ins(int u,int v,int w){e[++tot]=(node){u,v,first[u],w};first[u]=tot;} void dijkstra(){ mem(dis,127);dis[1]=0;q.push((point){0,1}); while(!q.empty()){ point p=q.top();q.pop(); int x=p.id; for(int i=first[x];i;i=e[i].ne){ int to=e[i].to; if(dis[to]>dis[x]+e[i].w){ dis[to]=dis[x]+e[i].w;q.push((point){dis[to],to}); dep[to]=dep[x]+1; fa[to]=x; } } } } int f ,ans ; int getf(int x){ if(f[x]==x)return x; f[x]=getf(f[x]); return f[x]; } int main(){ n=read();m=read(); for(int i=1;i<=n;i++)f[i]=i; for(int i=1,a,b,c;i<=m;i++){ a=read();b=read();c=read();ins(a,b,c);ins(b,a,c); } dijkstra(); for(int i=1;i<=tot;i++){ int x=e[i].fr,y=e[i].to; if(dep[x]<dep[y])swap(x,y); if(dis[x]==dis[y]+e[i].w)continue; d[++cnt]=(node){x,y,0,e[i].w+dis[x]+dis[y]}; } sort(d+1,d+1+cnt,cmp); for(int i=1;i<=cnt;i++){ int x=d[i].fr,y=d[i].to; x=getf(x),y=getf(y); while(x!=y){ if(dep[x]<dep[y])swap(x,y); if(!ans[x])ans[x]=d[i].w-dis[x]; x=f[x]=getf(fa[x]); } } for(int i=2;i<=n;i++){ if(!ans[i])printf("-1\n"); else printf("%d\n",ans[i]); } return 0; }bzoj1576
相关文章推荐
- bzoj 1576: [Usaco2009 Jan]安全路经Travel——并查集+dijkstra
- bzoj1576[Usaco2009 Jan]安全路径Travel(堆优化dijkstra+并查集)
- [BZOJ1576] [Usaco2009 Jan]安全路经Travel(堆优化dijk + (并查集 || 树剖))
- bzoj1576 [Usaco2009 Jan]安全路经Travel(最短路径树+并查集)
- [删边最短路 并查集] BZOJ 1576 [Usaco2009 Jan]安全路经Travel
- bzoj 1576[Usaco2009 Jan]安全路经Travel
- [bzoj1576] [Usaco2009 Jan]安全路经Travel
- bzoj 1576: [Usaco2009 Jan]安全路经Travel 树链剖分
- BZOJ_1576_[Usaco2009 Jan]安全路经Travel&&BZOJ_3694_最短路_树链剖分+线段树
- 【BZOJ1576】[Usaco2009 Jan]安全路经Travel【最短路树】【树链剖分】【线段树】
- [Usaco2009 Jan]安全路经Travel BZOJ1576 Dijkstra+树链剖分+线段树
- bzoj 1576: [Usaco2009 Jan]安全路经Travel
- 【BZOJ 1576】 [Usaco2009 Jan]安全路经Travel
- bzoj 1576 [Usaco2009 Jan]安全路经Travel(树链剖分,线段树)
- bzoj 1576: [Usaco2009 Jan]安全路经Travel【spfa+树链剖分+线段树】
- 【BZOJ】1576 [Usaco2009 Jan]安全路经Travel
- 【bzoj1576】【安全路径Travel】【dijkstra+树链剖分】
- 【bzoj1576】[Usaco2009 Jan]安全路经Travel
- [bzoj1576] [Usaco2009 Jan]安全路经Travel
- [BZOJ1576][Usaco2009 Jan]安全路径Travel(堆优化dijkstra+并查集)