#2 mle求调
查看原帖
#2 mle求调
1067742
ArisakaMashiro楼主2024/1/13 12:51
#include <iostream>
#include <unordered_map>
using namespace std;
int n, m, l, r, t, ut = 1, st = 1;
int eual[114514];
struct node{
    unsigned int l, r;
} un[114514];
unordered_map<unsigned int, int> save;
int find(int x){
    if(eual[x] == x){
        return x;
    }
    return eual[x] = find(eual[x]);
}
void merge(int x, int y){
    eual[find(x)] = find(y);
}
int main(){
    cin >> n;
    for(int i = 1; i <= n; i++){
        cin >> m;
        for(int j = 1; j <= 114514; j++){
            eual[j] = j;
        }
        for(int j = 1; j <= m; j++){
            cin >> l >> r >> t;
            if(save.find(l) == save.end()){
                save[l] = st;
                st++;
            }
            if(save.find(r) == save.end()){
                save[r] = st;
                st++;
            }
            if(t == 0){
                un[ut].l = l;
                un[ut].r = r;
                ut++;
            }
            else{
                merge(save[l], save[r]);
            }
        }
        for(int j = 1; j <= ut; j++){
            if(j == ut){
                cout << "YES" << '\n';
                break;
            }
            if(find(save[un[j].l]) == find(save[un[j].r]) && save[un[j].l] != save[un[j].r){
                cout << "NO" << '\n';
                break;
            }
        }
        ut = st = 1;
        save.clear();
    }
}
2024/1/13 12:51
加载中...