时间限制:3.000秒
题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=3601
题意就是给出一堆边,如果新加入的边形成了环,那么就不接受这条边,问最后不接受了几条边。
题也比较简单,用并查集检测即可,如果输入的边两个端点都在同一个连通分量里面,则形成了环,不接受这条边。
#include
int p[100010];
int findp(const int &x) { return p[x] == x ? x : p[x] = findp(p[x]); }
int main() {
int x, y;
while(~scanf("%d", &x)) {
for(int i = 0; i != 100010; ++i) p[i] = i;
int ans = 0;
while(x != -1) {
scanf("%d", &y);
x = findp(x), y = findp(y);
if(x == y) ++ans;
else p[x] = y;
scanf("%d", &x);
}
printf("%d\n", ans);
}
}