#include<iostream>
#define MAXN 1002
using namespace std;
int T[MAXN],X[MAXN],Y[MAXN],par[MAXN],shugao[MAXN];
void init(int n)
{
int i;
for(i=0;i<n;i++)
{
par[i]=i;//一开始这些节点并没有联系
shugao[i]=0;
}
}
int f_ind(int x)
{
if(par[x]==x)
{
return x;
}else{
return par[x]=f_ind(par[x]);
}
}
bool same(int x,int y)
{
return f_ind(x)==f_ind(y);
}
void unite(int x,int y)
{
x=f_ind(x);
y=f_ind(y);
if(x==y)
{
return ;
}
if(shugao[x]<shugao[y])
{
par[x]=y;
}
else
{
par[y]=x;
if(shugao[x]==shugao[y])
{
shugao[x]++;
}
}
}
int main()
{
int i,N,K,x,y,t;
cin >> N>>K;
for(i=0;i<K;i++)//输入K组数据,范围在N之间
{
cin>>T[i]>>X[i]>>Y[i];
}
init(3*N);
int ans=0;//记录错误信息
for(i=0;i<K;i++)
{
x=X[i],y=Y[i],t=T[i];
if(x<0||y>=N||y>N-1||y<0)
{
ans++;
continue ;
}
if(t==1)
{
if(same(x,y+N)||same(x,y+2*N))
{
ans++;
}
else
{
unite(x,y);
unite(x+N,y+N);
unite(x+2*N,y+2*N);
}
}
else
{
if(same(X[i],Y[i])||same(X[i],Y[i]+2*N))
{
ans++;
}
else
{
unite(x,y+N);
unite(x+N,y+2*N);
unite(x+2*N,y);
}
}
}
cout<<ans<<endl;
}
原文:http://www.cnblogs.com/41412179guo/p/4590743.html