求助为什么样例输出是2
查看原帖
求助为什么样例输出是2
600862
errormakers楼主2022/1/18 11:23
#include <bits/stdc++.h>
using namespace std;
int n, m, ans=0, fa[150010],a,b,c;
int find(int x)
{
    return fa[x]==x?x:fa[x]==find(fa[x]);
}
int main() {
    cin>>n>>m;
    for(int i=1;i<=n*3;i++) fa[i]=i;
    while(m--) {
        cin >> a >> b >> c;
        if (b > n || c > n) {
            ans++;
        }
        else if (a == 1) {
            if (find(b) == find(c + n) || find(b ) == find(c+2*n)) ans++;
            else {
                fa[find(b)] = find(c);
                fa[find(b + n)] = find(c + n);
                fa[find(b +n+n)] = find(c + n + n);
            }
        } else {
            if (find(b) == find(c) || find(b) == find(c + n*2)) ans++;
            else {
                fa[find(b )] = find(c+n);
                fa[find(b + n)] = find(c + 2*n);
                fa[find(b+2*n)] = find(c);
            }
        }
    }
    cout<<ans<<endl;
}
2022/1/18 11:23
加载中...