Submission #1139857

#TimeUsernameProblemLanguageResultExecution timeMemory
1139857pmmMonthly railway pass (LMIO18_menesinis_bilietas)C++20
100 / 100
374 ms35248 KiB
#include <iostream> #include <fstream> #include <string> #include <vector> #include <map> #include <iomanip> using namespace std; struct drum { int x; int y; bool t; }; const string file = "b"; const int N_max = 500005; ifstream fin(file + ".in"); ofstream fout(file + ".out"); int n, m; drum muc[N_max]; int father[N_max]; int nodes[N_max]; int fr[N_max]; map<pair<int, int>, int> already_added; void reading() { cin >> n >> m; for(int i = 1; i <= n; i++) { father[i] = i; nodes[i] = 1; } for(int i = 1; i <= m; i++) { char c; cin >> muc[i].x >> muc[i].y >> c; muc[i].t = (c == 'T'? 1: 0); } } int Sfather(int x) { if(x == father[x]) return x; father[x] = Sfather(father[x]); return father[x]; } void join(int x1, int x2, int&k) { int f1 = Sfather(x1); int f2 = Sfather(x2); if(f1 == f2) return; k--; if(nodes[f1] > nodes[f2]) { father[f2] = f1; nodes[f1] += nodes[f2]; } else { father[f1] = f2; nodes[f2] += nodes[f1]; } } int main() { reading(); int k = n; for(int i = 1; i <= m; i++) { if(muc[i].t == 1) join(muc[i].x, muc[i].y, k); } /* //debug cout<<"nod:"; for(int i=1; i<=20; i++) cout<<setw(3)<<i; cout<<endl; cout<<" F:"; for(int i=1; i<=20; i++) cout<<setw(3)<<father[i]; cout<<endl; cout<<" N:"; for(int i=1; i<=20; i++) cout<<setw(3)<<nodes[i]; cout<<endl; cout<<" SF:"; for(int i=1; i<=20; i++) cout<<setw(3)<<Sfather(i); cout<<endl; cout<<" N:"; for(int i=1; i<=20; i++) cout<<setw(3)<<nodes[i]; cout<<endl; */ for(int i = 1; i <= m; i++) { if(muc[i].t == 0) { int f1 = Sfather(muc[i].x), f2 = Sfather(muc[i].y); if(f1 == f2) continue; int mf = min(f1, f2), Mf = max(f1, f2); if(already_added[ {mf, Mf}] == 1)continue; already_added[ {mf,Mf}] = 1; fr[f1]++; fr[f2]++; } } if(k==1) cout<<n; else{ int sol = 0; for(int i = 1; i <= n; i++) { if(fr[i] == k - 1) sol += nodes[i]; } cout << sol; } }
#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...