Corporative Network UVA - 1329 加权并查集
2017-08-18 15:02
429 查看
可能是数据水点,,直接查找都不会错
f [ i ] 代表 i 的 父结点, d [ i ] 表示 i 到 父结点的距离,每次进行查找
下篇博文 给出 压缩路径的做法,,耗时比较少,可应对更大数据量
f [ i ] 代表 i 的 父结点, d [ i ] 表示 i 到 父结点的距离,每次进行查找
下篇博文 给出 压缩路径的做法,,耗时比较少,可应对更大数据量
#include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <set> #include <map> #include <stack> #include <queue> #include <ctype.h> #include <vector> #include <algorithm> #define in freopen("in.txt", "r", stdin) #define out freopen("out.txt", "w", stdout) // cout << " === " << endl; using namespace std; typedef long long ll; const int maxn = 20000 + 7, INF = 0x3f3f3f3f, mod = 1000; int T, n, ans; int f[maxn], d[maxn]; void find_(int id) { if(id == f[id]) return ; ans += d[id]; find_(f[id]); } void solve() { char c; while(scanf("%c", &c)) { if(c == 'O') return; if(c == 'E') { int id; scanf("%d", &id); //st.insert(id); ans = 0; find_(id); printf("%d\n", ans); } else if(c == 'I') { int a_, b_; scanf("%d %d", &a_, &b_); f[a_] = b_; d[a_] = abs(a_-b_) % mod; } } } int main() { scanf("%d", &T); while(T--) { scanf("%d", &n); for(int i = 0; i <= n; ++i) f[i] = i, d[i] = 0; solve(); } return 0; }
相关文章推荐
- UVa 1329 Corporative Network (加权并查集)
- C - Corporative Network UVA - 1329 -加权并查集
- Corporative Network UVA - 1329 加权并查集
- Corporative Network UVA - 1329 加权并查集(压缩路径优化)
- uva 1329 - Corporative Network(加权并查集)
- C - Corporative Network UVA - 1329 (并查集)
- uva1329 Corporative Network(并查集:路径压缩)
- LA3027:Corporative Network(并查集) uva 1329
- uva 12232 - Exclusive-OR(加权并查集)
- UVA 1329 - Corporative Network(带权并查集)
- UVA 1329 Corporative Network(并查集:路径压缩)
- UVa 1329 Corporative Network(并查集)
- uva 11987 Almost Union-Find(加权并查集)
- UVA-1329 - Corporative Network(并查集)
- UVa:1329 Corporative Network(带权并查集)
- 并查集uva1329(LA3027)
- UVA - 1329 Corporative Network(加权并查集)
- uva12232 - Exclusive-OR 加权并查集
- UVALive 4487 Exclusive-OR 加权并查集神题
- uva 1329 - Corporative Network(数据结构:并查集)