Submission #1241173

#TimeUsernameProblemLanguageResultExecution timeMemory
1241173pcpMonthly railway pass (LMIO18_menesinis_bilietas)C++20
65 / 100
3095 ms20000 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); for (int i=1;i<=n;++i){parents[i]=i;sizep[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; }else{ sizep[pb]+=sizep[pa]; parents[pa]=pb; } } }else{ connections[a].push_back(b); connections[b].push_back(a); } } int c=0; for (int nodo = 1; nodo<=n;++nodo){ int sp = getparent(nodo); if (c==n)break; if (!covered2[sp]){ covered2[sp]=true; memset(covered, 0, sizeof covered); int x=sizep[sp]; for (int i = 1;i<=n;++i){ int p=getparent(i); if (p!=sp && !covered[p]){ for (int it : connections[i]){ if (getparent(it)==sp){ x+=sizep[p]; covered[p]=1; break; } } } } if (x==n)c+=sizep[sp];//absolute cinema } } 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...