Submission #1241195

#TimeUsernameProblemLanguageResultExecution timeMemory
1241195pcpMonthly railway pass (LMIO18_menesinis_bilietas)C++20
0 / 100
3096 ms39380 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<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{ connections[a].push_back(b); connections[b].push_back(a); } } for (int i = 1; i < n; ++i){ if (i!=getparent(i)){ bool done[N]; memset(done, false, sizeof done); for (int it : connections[i]){ if (!done[getparent(it)]){done[getparent(it)]=true; connections[getparent(i)].push_back(getparent(it)); } } } } int c=0; for (auto nodeichon : amongos){ int k = sizep[nodeichon]; memset(covered, 0, sizeof covered); for (int con : connections[nodeichon]){ if (!covered[getparent(con)]){ covered[getparent(con)]=true;k+=sizep[getparent(con)]; } } if (k==n)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...