例题3.6 合作网络 UVa1329
2015-03-17 20:53
225 查看
1.题目描述:点击打开链接
2.解题思路:本题利用并查集解决。因为从题目的要求可知,只涉及距离查询到根结点的距离,因此除了根结点外,其他结点的位置可以任意改变,只是要维护到父结点的距离。当进行路径压缩时,更新这个距离值即可。
3.代码:
2.解题思路:本题利用并查集解决。因为从题目的要求可知,只涉及距离查询到根结点的距离,因此除了根结点外,其他结点的位置可以任意改变,只是要维护到父结点的距离。当进行路径压缩时,更新这个距离值即可。
3.代码:
#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<algorithm> #include<string> #include<sstream> #include<set> #include<vector> #include<stack> #include<map> #include<queue> #include<deque> #include<cstdlib> #include<cstdio> #include<cstring> #include<cmath> #include<ctime> #include<functional> using namespace std; #define N 20000+10 int pa , d ; int findset(int x) { if (pa[x] != x) { int root = findset(pa[x]);//找到根结点 d[x] += d[pa[x]];//更新d[x] return pa[x] = root;//路径压缩,将x的父结点直接修改为根结点 } else return x; } int main() { //freopen("t.txt", "r", stdin); int T; scanf("%d", &T); while (T--) { int n, u, v; char cmd[9]; scanf("%d", &n); for (int i = 1; i <= n; i++) { pa[i] = i; d[i] = 0; } while (scanf("%s", cmd) && cmd[0] != 'O') { if (cmd[0] == 'E') { scanf("%d", &u); findset(u);//查询距离时才进行路径压缩 printf("%d\n", d[u]); } if (cmd[0] == 'I') { scanf("%d%d", &u, &v); pa[u] = v; d[u] = abs(u - v) % 1000; } } } return 0; }
相关文章推荐
- 中国军事专家吁加强国际合作预防网络恐怖袭击
- Google与百度、搜狗合作,共同推进移动网络发展
- 例题:最短网络 图论算法之最小生成树 prim//kruskal 学习笔记
- NRI Secure和GE Digital合作在全球扩展运营技术网络稳健性认证
- LA 3027 合作网络
- 「2017年教育部-永信至诚产学合作协同育人网络空间安全专业课程教学研讨会」参会总结
- 例题1.15 网络 UVALive 3902
- 网络131第3周实验——循环与判断语句P25例题2-4
- SAS成功加入IBM SOA合作伙伴网络
- 并查集(合作网络,LA 3027)
- 合作项目二:“礼物”网---网络项目(拟.NET开发)
- LA 3207 合作网络 (加权并查集)
- GlobalSign 团队与世界领先的认证机构(CAs)合作 共同加强网络安全
- linux kernel 3.6版本网络子系统新特性 - TCP
- 网络项目寻找创业合作伙伴
- 百度:宣布亿元资本合作"杀入"网络视频
- 戴尔呼吁全球合作抗击网络犯罪
- 巨人和华为在网络游戏领域开展技术合作