#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <set>
using namespace std;
#define maxn 50100
int fa[maxn], def[maxn];
int find( int x )
{
if(fa[x] == x)
return x;
int tem = find(fa[x]);
def[x] = (def[x] + def[fa[x]] )%3;
// cout<<x<<"fa-> def "<<fa[x]<<"-> "<<def[x]<<endl;
return fa[x] = tem;
}
int unio( int x, int y, int val)
{
int fx = find(x);
int fy = find(y);
if(fx != fy)
{
fa[fx] = fy;
def[fx] = ( 3 - def[x] + val + def[y])%3;
}
}
int main()
{
int n, k;
scanf("%d %d",&n, &k);
int kind, a, b;
int ans = 0;
for( int i = 0 ; i <= n; i++)
{
fa[i] = i;
def[i] = 0;
}
for( int i = 0 ; i < k; i++)
{
scanf("%d %d %d",&kind, &a, &b);
if(a > n || b > n)
ans ++;
else if(a == b && kind == 2)
ans ++;
else
{ int fa = find(a);
int fb = find(b);
if(fa != fb)
{
unio(a, b, kind-1);
}
else
{
if(def[a] != ( def[b] + kind - 1) %3)
ans++;
}
}
}
printf("%d\n",ans);
}
POJ 1182
最新推荐文章于 2022-12-22 21:28:01 发布