Submission #1144171

#TimeUsernameProblemLanguageResultExecution timeMemory
1144171gramathegodMonthly railway pass (LMIO18_menesinis_bilietas)C++20
100 / 100
760 ms100220 KiB
#include <iostream>
#include <vector>
#include <unordered_map>
#include <set>

using namespace std;

class DSU{
public:
    vector<int> parent, size;
    DSU(int n){
        parent.resize(n+1);
        size.resize(n+1,1);
        for (int i=1;i<=n;i++){
            parent[i]=i;
        }
    }
    int find(int x){
        if (parent[x]!=x){
            parent[x]=find(parent[x]);
        }
        return parent[x];
    }
    void unite(int x, int y){
        int rootX=find(x);
        int rootY=find(y);
        if (rootX!=rootY){
            if (size[rootX]>size[rootY]){
                parent[rootY]=rootX;
                size[rootX]+=size[rootY];
            }
            else{
                parent[rootX]=rootY;
                size[rootY]+=size[rootX];
            }
        }
    }
};

int main() {

    int n,m,u,v;
    char c;
    cin>>n>>m;
    DSU dsu(n);
    vector<pair<int, int>> bus;
    for (int i=0;i<m;i++){
        cin>>u>>v>>ws>>c;
        if (c=='T'){
            dsu.unite(u,v);
        }
        else{
            bus.push_back({u,v});
        }
    }
    unordered_map<int, int> train;
    for (int i=1;i<=n;i++){
        train[dsu.find(i)]++;
    }
    unordered_map<int, set<int>> graph;
    for (auto& b : bus){
        int u=b.first, v=b.second;
        int rootu=dsu.find(u);
        int rootv=dsu.find(v);
        if (rootu!=rootv){
            graph[rootu].insert(rootv);
            graph[rootv].insert(rootu);
        }
    }
    int rez=0;
    for (auto& t : train){
        size_t visited=graph[t.first].size();
        if (visited + 1  == train.size()){
            rez+=t.second;
        }
    }
    cout<<rez;
    return 0;
}
#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...