제출 #1235832

#제출 시각아이디문제언어결과실행 시간메모리
1235832jundiDrivers (BOI24_drivers)C++20
100 / 100
358 ms14980 KiB
#include<bits/stdc++.h>
using namespace std;

#define fi first
#define se second

class DisjointSet{
    vector<int> rank,parent;
public:
    DisjointSet(int n){ 
        rank.resize(n+1,0);
        parent.resize(n+1);
        for(int i=0;i<n;i++){
            parent[i]=i;
        }
    }
    int findUPar(int node){  
        if(node== parent[node]) return node;
        else return parent[node]=findUPar(parent[node]);
    }
    void unionByRank(int u,int v){
        int pu=findUPar(u);
        int pv=findUPar(v);
        if(pu==pv) return;
        if(rank[pu]<rank[pv]){
            parent[pu]=pv;
        }
        else if(rank[pu]>rank[pv]){
            parent[pv]=pu;
        }
        else{
            parent[pv]=pu;
            rank[pu]++;
        }
    }
};

int main(){
    int n,m,q;
    cin>>n>>m>>q;

    vector<tuple<int,int,int>> edge;
    for(int i=0;i<m;i++){
        int a,b,c;
        cin>>a>>b>>c;
        a--; b--;
        edge.push_back({c,a,b});
    }

    vector<tuple<int,int,int,int>> qq;
    for(int i=0;i<q;i++){
        int a,b,c;
        cin>>a>>b>>c;
        a--; b--;
        qq.push_back({c,a,b,i});
    }

    sort(qq.begin(),qq.end());
    sort(edge.begin(),edge.end());

    DisjointSet ds(n);
    vector<string> ans(q);
    int index=0;
    for(int i=0;i<q;i++){
        while( index < m && get<0>(edge[index]) <= get<0>(qq[i])){
            int u=get<1>(edge[index]);
            int v=get<2>(edge[index]);
            ds.unionByRank(u,v);
            index++;
        }
        int u=get<1>(qq[i]);
        int v=get<2>(qq[i]);
        if(ds.findUPar(u)==ds.findUPar(v)) ans[get<3>(qq[i])]="TAIP";
        else ans[get<3>(qq[i])]="NE";
    }
    for(int i=0;i<q;i++){
        cout<<ans[i]<<endl;
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...