Submission #1220545

#TimeUsernameProblemLanguageResultExecution timeMemory
1220545juanmartinez111Monthly railway pass (LMIO18_menesinis_bilietas)C++20
6 / 100
377 ms65368 KiB
// Source: https://usaco.guide/general/io

#include <bits/stdc++.h>
using namespace std;
int parent[500001];
int siz[500001];
int n,m;
void create(int nn){
    for(int i=1;i<=nn;i++){
        parent[i]=i;
        siz[i]=1;
    }
}
int find_parent(int indx){
    if(parent[indx]==indx)return indx;
    return parent[indx]=find_parent(parent[indx]);
}
void join(int a,int b){
    //Si voy a unir a con b
    //encuentro representativo de a y b;
    a=find_parent(a);
    b=find_parent(b);   
    if(siz[a]<siz[b]){
        parent[a]=parent[b];
        siz[b]+=siz[a];
    }
    else{
        parent[b]=parent[a];
        siz[a]+=siz[b];
    }
}
int main(){
    vector<pair<int,int>>buses;
    cin>>n>>m;
    create(n);
    for(int i=0;i<m;i++){
        int u,v;
        char type;
        cin>>u>>v>>type;
        //buses;
        if(type=='A'){
            buses.push_back({u,v});
        }
        else{
            join(u,v);
        }
    }
    set<int>TodosLosConjuntos[n+1];
    long long ans=0;
    vector<int>Padres;
    for(int i=1;i<=n;i++){
        if(find_parent(i)==i)Padres.push_back(i);
    }
    for(auto [nodeA,nodeB]:buses){
        nodeA=find_parent(nodeA);
        nodeB=find_parent(nodeB);
        TodosLosConjuntos[nodeA].insert(nodeB);
        TodosLosConjuntos[nodeB].insert(nodeA);
    }
    for(int i=1;i<=n;i++){
        if(TodosLosConjuntos[i].size()+1==Padres.size())ans+=siz[i];
    }
    cout<<ans<<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...