#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int maxn = 50050;
int fa[maxn], relation[maxn];
int n;
int Find(int c)
{
if(c == fa[c]) return fa[c];
else
{
int t = Find(fa[c]);
relation[c] = (relation[c] + relation[fa[c]]) % 3;
return fa[c] = t;
}
}
int Union(int a, int b, int d)
{
int fx = Find(a);
int fy = Find(b);
if(fx == fy){
int t = (relation[a] - relation[b] + 3) % 3;
if(t == (d - 1)) return 0;
else return 1;
}
else{
fa[fx] = fy;
relation[fx] = (d - 1 + relation[b] - relation[a] + 3) % 3;
return 0;
}
}
void init()
{
for(int i = 1; i <= n; i++){
fa[i] = i;
relation[i] = 0;
}
}
int main()
{
int d, x, y, k;
scanf("%d%d", &n,&k);
init();//初始化
int ans = 0;
for(int i = 1; i <= k; i++){
scanf("%d%d%d", &d, &x, &y);
if(x > n || y > n) ans++;
else if((d == 2) && (x == y)) ans++;
else
ans += Union(x, y, d);//不同集合的合并
}
cout << ans << endl;
return 0;
}
/*该题不能说难但是很恶心交了太多次回头需要再次仔细看看*/
poj1182
最新推荐文章于 2021-09-09 08:03:56 发布