Submission #1241197

#TimeUsernameProblemLanguageResultExecution timeMemory
1241197pcpMonthly railway pass (LMIO18_menesinis_bilietas)C++20
100 / 100
468 ms88592 KiB
#include <bits/stdc++.h>
#include <iostream>
#define ll long long



using namespace std;
const int N=500010;

int parents[N];

int getparent(int node){
    if ( parents[node]==node)return parents[node]=node;
    else return parents[node] = getparent(parents[node]);
}

vector<pair<int,int>> connections2;
set<int> connections[N];

bool covered[N];
bool covered2[N];
int sizep[N];

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

    memset(sizep,0,sizeof sizep);
    memset(covered,0, sizeof covered);
    memset(covered2,0, sizeof covered2);

    set<int> amongos;

    for (int i=1;i<=n;++i){parents[i]=i;sizep[i]++;amongos.insert(i);}

    for (int i = 0;i<m;++i){

        char w;int a,b;cin>>a>>b>>w;
        int pa=getparent(a);
        int pb=getparent(b);
        if (w=='T'){
            if (pa!=pb){

                if (sizep[pa]>sizep[pb]){

                    sizep[pa]+=sizep[pb];
                    parents[pb]=pa;

                    amongos.erase(pb);

                }else{

                    sizep[pb]+=sizep[pa];
                    parents[pa]=pb;

                    amongos.erase(pa);

                }


            }
        }else{


            connections2.push_back({a,b});
        }
    }

    for (pair<int,int> it : connections2){

        int pa = getparent(it.first);
        int pb = getparent(it.second);


        if (pa!=pb){

            connections[pa].insert(pb);
            connections[pb].insert(pa);

        }


    }


    int c=0;
    for (auto nodeichon : amongos)if (connections[nodeichon].size() == amongos.size()-1)c+=sizep[nodeichon];



    cout<<c;


    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...