bzoj 1576(dijkstra+并查集)
来源:互联网 发布:淘宝关键词竞争力公式 编辑:程序博客网 时间:2024/05/19 14:56
传送门
题意:给定一个无向图,图中点1到任意一点的最短路唯一,问把到每个点最短路上的最后一条边去掉之后的最短路是多少。
#include<bits/stdc++.h>using namespace std;const int maxn=1e5+2,maxm=2e5+2,INF=0x3f3f3f3f;int n,m;int head[maxn],dis[maxn],fa[maxn],h[maxn],ans[maxn],edge=0;struct EDGE { int u,v,nxt,w;}e[maxm<<1];struct A { int x,y,z; friend bool operator <(const A &ff,const A &hh) { return ff.z<hh.z; }}a[maxm<<1];int cnt=0,temp;struct NODE { int id,dis; friend bool operator <(const NODE &ff,const NODE &hh) { return ff.dis>hh.dis; }};inline int read() { int x=0;char c=getchar(); while (c<'0'||c>'9') c=getchar(); while (c>='0'&&c<='9') x=x*10+c-'0',c=getchar(); return x;}inline void adde(int u,int v,int w) { e[edge].u=u,e[edge].v=v,e[edge].w=w,e[edge].nxt=head[u],head[u]=edge++; e[edge].u=v,e[edge].v=u,e[edge].w=w,e[edge].nxt=head[v],head[v]=edge++;}inline void dijkstra(int source) { memset(dis,INF,sizeof(dis)),dis[source]=0; priority_queue<NODE> q; NODE a={1,0}; q.push(a); while (!q.empty()) { a=q.top();q.pop(); int p=a.id; for (int i=head[p];~i;i=e[i].nxt) { int v=e[i].v; if (dis[v]>dis[p]+e[i].w) { dis[v]=dis[p]+e[i].w,fa[v]=p; NODE b={v,dis[v]}; q.push(b); } } }}int num(int p) { if (h[p]) return h[p]; return num(fa[p])+1;}int Merge(int x,int y) { if (x==y) return x; if (h[x]<h[y]) x^=y^=x^=y; ans[x]=(~ans[x])?ans[x]:(temp-dis[x]); return fa[x]=Merge(fa[x],y);}int main() {// freopen("bzoj 1576.in","r",stdin); memset(head,-1,sizeof(head)); memset(h,0,sizeof(h)); memset(ans,-1,sizeof(ans)); n=read(),m=read(); for (register int i=1;i<=m;++i) { int u=read(),v=read(),w=read(); adde(u,v,w); } dijkstra(1); fa[1]=h[1]=1; for (register int i=2;i<=n;++i) h[i]=num(i); for (register int i=0;i<edge;i+=2) { int u=e[i].u,v=e[i].v,w=e[i].w; if (dis[u]>dis[v]) u^=v^=u^=v; if (dis[u]+w==dis[v]) continue; a[++cnt]=(A){u,v,dis[u]+dis[v]+w}; } sort(a+1,a+cnt+1); for (register int i=1;i<=cnt;++i) { int x=a[i].x,y=a[i].y; temp=a[i].z; x=Merge(x,y); } for (register int i=2;i<=n;++i) printf("%d\n",ans[i]); return 0;}
阅读全文
0 0
- bzoj 1576(dijkstra+并查集)
- bzoj 1576: [Usaco2009 Jan]安全路经Travel(dijkstra堆优化+并查集)
- Dijkstra 并查集 Kruskal
- bzoj 1116(构造+并查集)
- BZOJ 3624 并查集 (Kruskal)
- BZOJ 1854-游戏(并查集)
- bzoj 3910(LCA+并查集)
- bzoj 1116(并查集)
- bzoj 4569(并查集)
- BZOJ 4569 萌萌哒 (并查集)
- BZOJ 1854 游戏 (并查集)
- BZOJ 1202 并查集
- BZOJ 1015 并查集
- BZOJ 1854 并查集
- BZOJ 1015 并查集
- bzoj 1529 并查集
- BZOJ 1116 并查集
- bzoj 1116 并查集
- 【复习笔记】数据库的五种隔离级别
- POJ
- 测试分类
- centos下搭建jenkins自动打包功能--Android
- 全球最杰出的14位程序员
- bzoj 1576(dijkstra+并查集)
- 剑指Offer_面试题25_二叉树中和为某一值的路径
- 全栈工程师之路-中级篇之小程序开发-第二章第四节小程序http请求与请求本地json文件
- 玄宇说:伪静态页面源码实例参考
- webpack学习-tree shaking(https://webpack.js.org/guides/tree-shaking/)
- 数据库常用知识点
- hibernate5初入门配置实例
- bootstrap的icheck插件使用
- MyBatis的映射文件mapper的select标签