玄关,求调
查看原帖
玄关,求调
1501877
wuzebang2009楼主2025/1/13 15:28
#include<bits/stdc++.h>
using namespace std;
map<string,string> fa;
vector<pair<string,string>> v1;
vector<pair<string,string>> v2;
int t,n,e;
string x,y;

string find(string x){
    // if(fa[x][0]>'9' || fa[x][0]<'0'){
    //     return x;
    // }
    if(x==fa[x]){
        return x;
    }
    fa[x]=find(fa[x]);
    return x=fa[x];
}

void join(string x,string y){
    fa[find(x)]=find(y);
}


int main(){
    cin>>t;
    while(t--){
        cin>>n;
        int flag=1;
        for(int i=1;i<=n;i++){
            cin>>x>>y>>e;
            fa[x]=x;
            fa[y]=y;
            if(e==1){
                // join(x,y);
                v1.push_back(make_pair(x,y));
            }
            if(e==0){
                v2.push_back(make_pair(x,y));
                // if(fa[x]==fa[y]) flag=0;
                // join(x+n,y);
            }
        }
        for(int i=0;i<v1.size();i++){
            string x=v1[i].first;
            string y=v1[i].second;
            join(y,x);
        }
        for(int i=0;i<v2.size();i++){
            string x=v2[i].first;
            string y=v2[i].second;
            if(fa[x]==fa[y]) {flag=0;break;}
        }
        if(flag) cout<<"YES"<<endl;
        else cout<<"NO"<<endl;
        v1.clear();
        v2.clear();
        fa.clear();
    }
}

30pts,#2 #10 TLE,#34567 WA

2025/1/13 15:28
加载中...