제출 #1235641

#제출 시각아이디문제언어결과실행 시간메모리
1235641jundiMonthly railway pass (LMIO18_menesinis_bilietas)C++20
10 / 100
209 ms7812 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,q;
    cin>>n>>q;
    DisjointSet ds(n);
    vector<pair<int,int>> p(q);
    vector<char> t(q);
    for(int i=0;i<q;i++){
        cin>>p[i].fi>>p[i].se>>t[i];
        p[i].fi--; p[i].se--;
        if(t[i]=='T') ds.unionByRank(p[i].fi,p[i].se);
    }
    vector<int> cnt(n+1,0);
    for(int i=0;i<n;i++){
        cnt[ds.findUPar(i)]++;
        // cout<<i<<" "<<ds.findUPar(i)<<endl;
    }
    int ans=0;
    for(int i=0;i<n;i++){
        // cout<<cnt[i]<<" ";
        ans=max(ans,cnt[i]);
    }
    // cout<<endl;
    if(ans!=n) cout<<0;
    else cout<<ans;
}
#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...