제출 #1241197

#제출 시각아이디문제언어결과실행 시간메모리
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...