hdu3047 Zjnu Stadium(帶权并查集 详细图解)?
来源:互联网 发布:mac唇釉价格 编辑:程序博客网 时间:2024/06/06 08:43
分析如下:先将各个点对union起来得到如下图解:
上图最下面是最终路径压缩后的结果。
此程序仅供参考,过不了OJ,想要过OJ 的话请去其他博客看源代码。
#include<stdlib.h>#include<stdio.h>#define N 50005int pre[N],dis[N];void init1(int n){ for(int i=0;i<=n;i++) { pre[i]=i; dis[i]=0; }}void myunion(int a,int b,int dist,int fa,int fb){ pre[fb]=fa;//合并 dis[fb]=dis[a]+dist-dis[b];//同时更新fb到新根的距离,以使a与b的距离刚好等于dist }int find(int x){ if(pre[x]!=x) { int tem=pre[x]; pre[x]=find(pre[x]);//路径压缩 dis[x]+=dis[tem];//dis[x]+=父亲节点到根的距离 。这样就是X到根的距离 return pre[x];//每次返回都是同一个数 ,即这个集合的根 } return x; }int main(){ int i,n,m,u,v,dist,count=0,fa,fb; while(scanf("%d%d",&n,&m)!=EOF) { init1(n); for(i=1;i<=m;i++) { scanf("%d%d%d",&u,&v,&dist); fa=find(u); fb=find(v); if(fa!=fb) myunion(u,v,dist,fa,fb); else if(dist!=dis[v]-dis[u])//在同一棵树上 count++; } printf("%d\n",count); } //system("pause"); return 0; }/*这是我改过的数据,测试正确,不过不知道为什么程序过不了杭电OJ10 101 2 1503 4 2001 5 4302 6 2006 5 804 7 1508 9 1004 8 501 7 1009 2 50*/
- hdu3047 Zjnu Stadium(帶权并查集 详细图解)?
- HDU3047:Zjnu Stadium(并查集)
- Zjnu Stadium(hdu3047带权并查集)
- hdu3047 Zjnu Stadium--带权并查集
- HDU3047 Zjnu Stadium(带权并查集)
- HDU3047 Zjnu Stadium(带权并查集)
- hdu3047 Zjnu Stadium
- HDU3047 Zjnu Stadium
- HDU 3047 Zjnu Stadium (带权并查集)
- hdu 3047 Zjnu Stadium(带权并查集)
- hdu 3047 Zjnu Stadium (带权并查集)
- HDU 3047 Zjnu Stadium 带权并查集
- hdu 3047 Zjnu Stadium (带权并查集)
- HDU 3047 Zjnu Stadium 带权并查集
- HDU 3047 Zjnu Stadium 带权并查集
- HDU - 3047 Zjnu Stadium 带权并查集
- hdu 3047 Zjnu Stadium【带权并查集】
- hdu 3047 Zjnu Stadium 带权并查集
- 用户注册jquery验证
- HDU--2108 -- Shape of HDU [向量判断凸多边形]
- linux下拷贝 链接文件
- Remove Coranti 2012 with WindowsUninstaller.Org Removal Tips
- 错误 地址错误 内存泄漏 跟踪 EurekaLog
- hdu3047 Zjnu Stadium(帶权并查集 详细图解)?
- c++中STL库 简介 及 使用说明
- 指向结构体变量的指针
- POJ 2761 (SBT模板)
- ORACLE在Noarchivelog和archivelog之间切换的一点实践
- java jni helloworld 例子
- excel 宏学习(合并相同内容单元格)
- 编程技术面试的五大要点
- Android之ListView优化(使用Lrucache,图片滑动时使用默认图片,停止时加载)