本文主要是介绍UVA - 1329 Corporative Network,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题意:有n个节点,初始话每个节点的父节点都是不存在的,你的任务是执行I或者E操作
I:u,v将u的父节点设为v ,距离为|u-v|%1000; E:询问u到根节点的距离
输出每条E操作
思路:在并查集的基础上加上路径的压缩
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
const int mod = 1000;
const int MAXN = 20005;int d[MAXN],f[MAXN],n;int find(int x){if (f[x] != x){int root = find(f[x]);d[x] += d[f[x]]; return f[x] = root;}else return x;
}int main(){int t;scanf("%d",&t);while (t--){scanf("%d",&n);for (int i = 0; i <= n; i++)f[i] = i,d[i] = 0;int u,v;char op;while (cin >> op && op != 'O'){if (op == 'I'){scanf("%d%d",&u,&v);f[u] = v;d[u] = abs(u-v) % mod;}else {scanf("%d",&u);find(u);printf("%d\n",d[u]);}}}return 0;
}
这篇关于UVA - 1329 Corporative Network的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!