【NOI-2002】银河英雄传说
程序员文章站
2022-06-02 19:55:08
...
#include <bits/stdc++.h>
using namespace std;
const int N = 1 << 20;
int fa[N], dist[N], size[N];
int get(int x) {
if (x == fa[x]) return x;
int root = get(fa[x]);
dist[x] += dist[fa[x]];
return fa[x] = root;
}
void merge(int x,int y) {
x = get(x), y = get(y);
fa[x] = y, dist[x] += size[y];
size[y] += size[x];
}
int main() {
int T; cin >> T;
for (int i = 1; i <= 30000; ++i) {
fa[i] =i; size[i] = 1;
}
while (T--) {
char op; int x, y;
getchar();
scanf("%c %d %d",&op, &x, &y);
if (op == 'M') {
merge(x,y);
}
if (op == 'C') {
if (get(x) == get(y)) {
printf("%d\n",abs(dist[x]-dist[y])-1);
} else {
puts("-1");
}
}
}
return 0;
}
下一篇: 卫玠的玄学成就:推进了当时社会文化的进步