Submission #1306343

#TimeUsernameProblemLanguageResultExecution timeMemory
1306343SofiatpcMonthly railway pass (LMIO18_menesinis_bilietas)C++20
16 / 100
455 ms69772 KiB
#include <bits/stdc++.h> using namespace std; #define sz(v) (int)v.size() const int MAXN = 5*1e5+5; int p[MAXN], s[MAXN], marc[MAXN]; set<int> adj[MAXN]; int find(int x){ if(p[x] == x)return x; return p[x] = find(p[x]); } void merge(int a, int b){ a = find(a), b = find(b); if(a == b)return; if(s[a] < s[b])swap(a,b); s[a] += s[b]; p[b] = a; } signed main(){ ios_base::sync_with_stdio(0); cin.tie(0); int n,m; cin>>n>>m; for(int i = 1; i <= n; i++){ p[i] = i; s[i] = 1; } vector<int> va,vb; for(int i = 1; i <= m; i++){ int a,b; char c; cin>>a>>b>>c; if(c == 'T') merge(a,b); else { va.push_back(a); vb.push_back(b); } } for(int i = 0; i < sz(va); i++){ adj[ find(va[i]) ].insert( find(vb[i]) ); adj[ find(vb[i]) ].insert( find(va[i]) ); } int ans = 0; for(int i = 1; i <= n; i++){ if(marc[ find(i) ] == 0){ int qtd = s[find(i)]; for(int viz : adj[ find(i) ])qtd += s[viz]; if(qtd == n)marc[ find(i) ] = 1; else marc[ find(i) ] = 2; } if(marc[find(i)] == 1)ans++; } cout<<ans<<"\n"; }
#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...