제출 #1140934

#제출 시각아이디문제언어결과실행 시간메모리
1140934adelinaMonthly railway pass (LMIO18_menesinis_bilietas)C++20
0 / 100
3095 ms17476 KiB
#include <iostream> #include <vector> #include <queue> #pragma gcc optimize("O4,Ofast") #pragma gcc optimize("unroll-loops") using namespace std; const int Nmax = 5e5 + 5; vector<int>g[Nmax]; bool mor[Nmax], vis[Nmax]; int parent[Nmax], sz[Nmax], comp[Nmax], par[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; 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[a].push_back(b); g[b].push_back(a); } } for(i = 1; i <= n; i ++) par[findd(i)] = 1; for(i = 1; i <= n; i ++) { int parinte = findd(i); if(vis[parinte]) continue; int cnt = 0; for(auto it: g[i]) mor[findd(it)] = 1; //cout << i << ": "; for(int j = 1; j <= n; j ++) if(mor[j]) cnt += sz[j], mor[j] = 0; // cout << '\n'; if(cnt + sz[parinte] == n) ans += sz[parinte], vis[parinte] = 1; //cout << i << " " << parinte << " " << sz[parinte] << " " << cnt << '\n'; } 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...