UVA 1329 Corporative Network(并查集:路径压缩)

2014年03月09日 00:19:33

阅读数:914

UVA 1329 Corporative Network(并查集:路径压缩)

题意:

初始时有n个点(编号1到n),每个点都没有父节点,然后依次执行下面两条命令:

I u v :把节点u的父亲设置为v,并且设u节点到v的距离为|u-v|%1000,输入保证执行I命令的时候,u没有父节点。

E u:查询u节点到根节点的距离。

输入:首先是T,表示实例个数。每个实例第一行是n(5<=n<=20000),接下有不超过200000行,每行一个指令,以单独的O字母行表示结束。

输出:对于每条E指令,输出查询结果。

分析:

本题连通分量的节点不仅要维护fa信息,还需要维护dist信息。

其中fa[i]表示i节点的直属父亲节点编号,dist[i]表示i节点到它直属父亲节点的距离。在每次findset(i)操作后,将i节点连接到当前连通分量的根节点下面,并且更新dist[i]的值。其实就是比普通的并查集操作多了一个相对距离的概念。

注意:每次查询u节点到根节点距离前,需要findset(u)操作,这样才能让u节点放在其所属连通分量的根节点下面。

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=20000+5;//路径压缩并查集
int fa[maxn];
int dist[maxn];
int findset(int x)
{if(fa[x]==-1) return x;int root = findset(fa[x]);dist[x] += dist[fa[x]];return fa[x] = root;
}int main()
{int T;scanf("%d",&T);while(T--){int n;scanf("%d",&n);for(int i=1;i<=n;i++){fa[i]=-1;dist[i]=0;}char str[100];while(scanf("%s",str)==1 && str[0]!='O'){if(str[0]=='I'){int u,v;scanf("%d%d",&u,&v);fa[u]=v;dist[u]= abs(u-v)%1000;}else if(str[0]=='E'){int u;scanf("%d",&u);findset(u);printf("%d\n",dist[u]);}}}return 0;
}
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int MAXN=20000+100;
int d[MAXN];//点到根节点的距离
int pa[MAXN];//父节点
int findset(int x)//查询x的根节点,并且使得d[x]变成x到根的距离
{if(x==pa[x])return x;int root = findset(pa[x]);//执行完这句,pa[X]到根的距离已经是d[pa[x]]了d[x]=d[x]+d[pa[x]];return pa[x]=root;
}int main()
{int T;scanf("%d",&T);while(T--){int n;scanf("%d",&n);for(int i=0;i<=n;i++){pa[i]=i;d[i]=0;}char op[20];while(scanf("%s",op)){if(op[0]=='O')break;else if(op[0]=='I'){int u,v;scanf("%d%d",&u,&v);pa[u]=v;d[u]=abs(u-v)%1000;}else if(op[0]=='E'){int u;scanf("%d",&u);findset(u);printf("%d\n",d[u]);}getchar();//读/n}}return 0;
}

UVA 1329 Corporative Network(并查集:路径压缩)相关推荐

  1. Rochambeau POJ - 2912 (枚举和加权并查集+路径压缩)找唯一裁判

    题意:有n个人玩石头剪刀布,有且只有一个裁判.除了裁判每个人的出拳形式都是一样的. a<b表示b打败a,a=b表示a和b出拳一样,平手.a>b表示a打败b. 给出m个回合的游戏结果,问能否 ...

  2. UVA 1329——Corporative Network

    题意:有n个节点,然后执行I u,v(把u的父节点设为v)和E u(询问u到根节点的距离). 思路:并查集.加了信息的并查集,在路径压缩的同时维护距离d[i]; code: #include < ...

  3. 并查集路径压缩_并查集(UnionFind)技巧总结

    什么是并查集 在计算机科学中,并查集是一种树型的数据结构,用于处理一些不交集(Disjoint Sets)的合并及查询问题.有一个联合-查找算法(Union-find Algorithm)定义了两个用 ...

  4. 并查集 路径压缩(具体解释)

    拿HDU 1232举例. 题解: 首先在地图上给你若干个城镇,这些城镇都能够看作点,然后告诉你哪些对城镇之间是有道路直接相连的.最后要解决的是整幅图的连通性问题.比方任意给你两个点.让你推断它们是否连 ...

  5. 并查集路径压缩_第二十五天:并查集

    今天是释然发题解的第二十五天,以后会经常和大家分享学习路上的心得,希望和大家一起进步,一起享受coding的乐趣 本文约1400字,预计阅读5分钟 昨天我们学习了动态规划之线性规划,忘记的小伙伴们可以 ...

  6. Never Wait for Weights(带权并查集+路径压缩)

    题目链接:http://acm.sdibt.edu.cn/vjudge/contest/view.action?cid=2209#problem/F !a b w 表示b比a大w ?  a b  输出 ...

  7. 并查集路径压缩和按rank合并代码实现

    1.子集结构体:parent为每个子集的根,rank为秩 struct Subset {int parent;int rank; }; 2.初始化: 一开始每个顶点自成一个子集,它们的parent指向 ...

  8. POJ 2236 Wireless Network 并查集

    Wireless Network 并查集 Crawling in process... Crawling failed Time Limit:10000MS     Memory Limit:6553 ...

  9. CF-1023F.Mobile Phone Network(并查集缩点)

    CF-1023F.Mobile Phone Network(并查集缩点) 题目链接 题意 你手里有K条边还没有分配权值,已经存在M条边带权值,如何给你手中的边分配权值,使得K条边都在最后的最小生成树中 ...

最新文章

  1. linux 下 C 编程和make的方法 (十、C版的try catch 捕捉段错误和异常处理)
  2. asp.net三层架构详解
  3. macaca使用中问题解决方法整理
  4. 格力发布公告称双11期间让利30亿元打击低质伪劣产品
  5. linux下查看CPU、内存、磁盘信息
  6. DeepLab图像分割
  7. Qt 实现Windows系统Win10 c++音量调节
  8. python输入数字输出月份英文缩写_英文和数字表示的月份,如何在 Excel 中相互转换?...
  9. pitfall when implementing multiple interfaces
  10. 莫纳什大学计算机专业排名,澳大利亚大学计算机专业排名
  11. android 开源远程工具项目scrcpy 简单使用
  12. ob集群安装部署相关
  13. [转载]17岁高考落榜生成为世界顶尖IT高手
  14. ESP32开发之旅——ssd1306 OLED屏的使用
  15. 支付宝/小钱袋H5支付通道
  16. iPhone的解锁、越狱、激活、固件等等是什么意思,有什么分别?(转)
  17. 前端高频面试题-非框架
  18. 计算机感染木马或病毒,电脑中木马病毒的症状
  19. java如何实现qq分组_QQ好友分组小程序
  20. 一文搞懂均匀分布、高斯分布、瑞利分布、莱斯分布(含MATLAB代码)

热门文章

  1. threadlocal使用场景_ThreadLocal有没有内存泄漏?源码给你安排得明明白白
  2. nginx websocket wss 连接失败 failed_浅谈WebSocket协议、WS协议和WSS协议原理及关系
  3. python从入门到精通 pdf 完整超清版-Python从入门到精通PDF高清完整版免费下载|百度云盘...
  4. python工资一般多少西安-python西安薪资
  5. python自学-我是如何自学 Python 的
  6. python-Python教程
  7. 学python后到底能干什么-学Python后到底能干什么
  8. 学python可以从事什么工作-学完Python能从事哪些工作?
  9. python创建txt文件并写入-python如何将数据写入本地txt文本文件
  10. python 下载文件-Python实现HTTP协议下的文件下载方法总结