并查集大家应该都会,在此博主就不多说,一道裸题,但是注意要路径压缩,否则会超时,加了路径压缩6ms。
废话不多说,直接上代码。
#include<iostream>
#include<cmath>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#include<queue>
#include<map>
#include<ctime>
using namespace std;
#define REP(i, a, b) for(int i = (a), _end_ = (b);i <= _end_; ++i)
int f[100010];
int cha(int x) {
return f[x] != x ? f[x] = cha(f[x]) : x;
}
int main() {
int n, m;
while(scanf("%d", &n) == 1) {
REP(i, 1, 100000)
f[i] = i;
int ans = 0;
while(n != -1) {
scanf("%d", &m);
n = cha(n);
m = cha(m);
if(n == m)
++ans;
else
f[n] = m;
scanf("%d", &n);
}
printf("%d\n", ans);
}
}