제출 #1140936

#제출 시각아이디문제언어결과실행 시간메모리
1140936adelinaMonthly railway pass (LMIO18_menesinis_bilietas)C++20
100 / 100
665 ms70192 KiB
#include <iostream> #include <vector> #include <set> using namespace std; const int Nmax = 5e5 + 5; vector<pair<int, int>>g; set<int>plang[Nmax]; bool used[Nmax]; int parent[Nmax], sz[Nmax], comp[Nmax]; int findd(int nod) { if(nod == parent[nod]) return nod; return parent[nod] = findd(parent[nod]); } void unite(int u, int v) { u = findd(u); v = findd(v); if(u == v) return; if(sz[v] > sz[u]) swap(u, v); parent[v] = u; sz[u] += sz[v]; sz[v] = 0; } int main() { int n, m, a, b, i, c, ans = 0, p = 0, nrc = 0; char ch; cin >> n >> m; for(i = 1; i <= n; i ++) parent[i] = i, sz[i] = 1; for(i = 1; i <= m ; i ++) { cin >> a >> b >> ch; if(ch == 'T') unite(a, b); else g.push_back({a, b}); } for(i = 1; i <= n; i ++) comp[i] = findd(i), used[comp[i]] = 1; for(i = 1; i <= n; i ++) if(used[i]) nrc ++; for(auto [a, b]: g) { if(comp[a] != comp[b]) plang[comp[a]].insert(comp[b]), plang[comp[b]].insert(comp[a]); } for(i = 1; i <= n; i ++) if(used[i] && plang[i].size() == nrc - 1) ans += sz[i]; cout << ans; 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...