题目链接:http://poj.org/problem?id=1182
思路 看这位的博客 :http://blog.csdn.net/niushuai666/article/details/6981689#0-qzone-1-68596-d020d2d2a4e8d1a374a433f596ad1440
思路就这样 但是代码有点问题 。
下面是本人的代码 : 测试已过。
#include <stdio.h>
#define ss 50010
int sum;
typedef struct
{
int pre;
int rela;
}node;
node p[ss];
int find(int x)
{
if(x==p[x].pre) return x;
int tmp = p[x].pre;
p[x].pre = find(tmp);
p[x].rela = (p[x].rela + p[tmp].rela)%3;
return p[x].pre;
}
int main()
{
int i,j1,k,j2,y,z,n,d,dis;
scanf("%d%d",&n,&k);
sum=0;
for(i=1;i<=n;i++)
{
p[i].pre=i;
p[i].rela=0;
}
for(i=1;i<=k;i++)
{
scanf("%d%d%d",&d,&y,&z);
if(y>n||z>n) sum++;
else if(d==2&&y==z) sum++;
else
{
j1=find(y);
j2=find(z);
if(j1==j2)
{
dis = (-p[y].rela + p[z].rela + 3)%3;
if(dis!=d-1) sum++;
}
else<span style="white-space:pre"> </span>//否则合并
{
p[j2].pre=j1;
p[j2].rela=(-p[z].rela + d-1 + p[y].rela + 3)%3;
}
}
}
printf("%d\n",sum);
return 0;
}