1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
|
#include <iostream>
using namespace std;
const int N = 5e4 + 10;
int p[N], d[N]; int n, m;
int find(int x){ if(p[x] != x) { int t = find(p[x]); d[x] += d[p[x]]; p[x] = t; } return p[x];
}
int main(){ ios::sync_with_stdio(false); cin.tie(0); cin>>n>>m; for(int i = 1; i <= n; i++) p[i] = i; int o, x, y, res = 0; while(m--){ cin>>o>>x>>y; if(x > n || y > n) res ++; else { int px = find(x), py = find(y); if(o == 1){ if(px == py && (d[x] - d[y]) % 3) res ++; else if(px != py){ p[px] = py; d[px] = ((d[y] - d[x]) + 3) % 3; } } else { if(px == py && (d[x] - d[y] - 1) % 3) res ++; else if(px != py){ p[px] = py; d[px] = ((d[y] - d[x] + 1) + 3) % 3; } } } } cout<<res<<endl; return 0; }
|