不允许有环; 如果有环则拒绝接受数据并且计数+1
水题一个不做多说明
AC 代码:
#include <iostream>
#include <cstdio>
using namespace std;
int par[100050];
int Rank[100050];
void init(int n)
{
for(int i=0; i<n; i++)
{
par[i] = i;
Rank[i] = 0;
}
}
int find_par(int n)
{
if(par[n] == n) return n;
return par[n] = find_par(par[n]);
}
void unit_par(int a, int b)
{
a = find_par(a);
b = find_par(b);
if(a == b) return;
if(Rank[a] < Rank[b]) par[a] = b;
else
{
par[b] = a;
if(Rank[a] == Rank[b]) Rank[a]++;
}
}
bool same(int a, int b)
{
return find_par(a) == find_par(b);
}
int main()
{
int a, b;
init(100000);
int cnt = 0;
while(~scanf("%d", &a))
{
init(100050);
cnt = 0;
while(a != -1)
{
scanf("%d", &b);
if(same(a,b)) cnt++;
else {
unit_par(a, b);
}
scanf("%d", &a);
}
printf("%d\n", cnt);
}
return 0;
}