Submission #920869

#TimeUsernameProblemLanguageResultExecution timeMemory
920869Sandarach151Monthly railway pass (LMIO18_menesinis_bilietas)C++17
100 / 100
580 ms90656 KiB
#include<bits/stdc++.h> using namespace std; vector<int> link; vector<int> sizes; int find(int x){ while(x!=link[x]) x = link[x]; return x; } bool same(int a, int b){ return find(a)==find(b); } void unite(int a, int b){ a = find(a); b = find(b); if(a!=b){ if(sizes[a]<sizes[b]) swap(a, b); link[b] = a; sizes[a] += sizes[b]; } } int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); int n, m; cin >> n >> m; vector<pair<int, bool> > adg[n]; vector<pair<int, int> > bus; link.resize(n); sizes.resize(n); int newsize[n]; for(int i=0; i<n; i++){ link[i]=i; sizes[i]=1; newsize[i]=0; } for(int i=0; i<m; i++){ int a, b; char t; cin >> a >> b >> t; a--; b--; adg[a].push_back(make_pair(b, (t=='T'))); adg[b].push_back(make_pair(a, (t=='T'))); if(t=='T') unite(a, b); else bus.push_back(make_pair(a, b)); } set<int> newgraph[n]; for(auto u : bus){ if(find(u.first)!=find(u.second)){ if(newgraph[find(u.first)].count(find(u.second))==0){ newsize[find(u.first)]+=sizes[find(u.second)]; newsize[find(u.second)]+=sizes[find(u.first)]; newgraph[find(u.first)].insert(find(u.second)); newgraph[find(u.second)].insert(find(u.first)); } } } int ans = 0; for(int i=0; i<n; i++){ if(newsize[i]+sizes[i]==n){ ans+=sizes[i]; } } cout << ans << '\n'; 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...