Submission #1139330

#TimeUsernameProblemLanguageResultExecution timeMemory
1139330draguta_mihaiMonthly railway pass (LMIO18_menesinis_bilietas)C++20
100 / 100
370 ms81868 KiB
#include <iostream> #include <vector> #include <set> using namespace std; const int NMAX = 5e5 + 1; int n, m; int cnt, nr; struct bus { int a, b, tip; }; bus v[NMAX]; bool viz[NMAX]; int M[NMAX],x[NMAX]; vector<vector<int>>G(NMAX); vector<set<int>>C(NMAX); void Read() { int a, b; char ch; cin >> n >> m; for(int i = 1; i <= m; i++) { cin >> a >> b; cin >> ch; if(ch == 'A') { v[++cnt].a = a; v[cnt].b = b; } else { G[a].push_back(b); G[b].push_back(a); } } } void dfs(int idx, int mark) { x[nr]++; viz[idx] = 1; M[idx] = mark; for(auto x : G[idx]) if(viz[x] == 0) dfs(x, mark); } void compute_conex_elements() { for(int i = 1; i <= n; i++) if(viz[i] == 0) dfs(i, ++nr); } void create_C() { for(int i = 1; i <= cnt; i++) { int a = v[i].a, b = v[i].b; if(M[a] != M[b]) { C[M[a]].insert(M[b]); C[M[b]].insert(M[a]); } } } void answer() { int sol = 0; for(int i = 1; i <= nr; i++) { if(C[i].size() == nr - 1) sol+=x[i]; } cout << sol; } int main() { Read(); compute_conex_elements(); create_C(); answer(); 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...