Submission #382152

#TimeUsernameProblemLanguageResultExecution timeMemory
382152mohamedsobhi777Monthly railway pass (LMIO18_menesinis_bilietas)C++14
100 / 100
284 ms40052 KiB
#include <bits/stdc++.h> using namespace std; #define vi vector<int> #define vll vector<ll> #define vii vector<pair<int, int>> #define pii pair<int, int> #define pll pair<ll, ll> #define loop(_) for (int __ = 0; __ < (_); ++__) #define pb push_back #define f first #define s second #define sz(_) ((int)_.size()) #define all(_) _.begin(), _.end() #define lb lower_bound #define ub upper_bound using ll = long long; using ld = long double; const int N = 5e5 + 7; const ll mod = 1e9 + 7; int n, m; vii e; vi adj[N]; struct dsu { int fat[N]; int cnt[N] ; int comp = 0; dsu() { fill(cnt , cnt + N , 1) ; iota(fat, fat + N, 0); } void link(int u, int v) { u = find(u); v = find(v); if(u != v){ ++ comp ; cnt[v] += cnt[u] ; cnt[u] = 0 ; fat[u] = v; } } int find(int x) { return fat[x] = x == fat[x] ? x : find(fat[x]); } } d1, d2; int main() { ios_base::sync_with_stdio(0); cin.tie(0); #ifndef ONLINE_JUDGE #endif cin >> n >> m; for (int i = 0; i < m; ++i) { int u, v; char c; cin >> u >> v >> c; if (c == 'T') { d1.link(u, v); } else { e.pb({u, v}); } d2.link(u, v); } if (d2.comp != n - 1) return cout << 0, 0; int ans = 0; if (e.empty()) { return cout << n, 0; } else { for (auto u : e) { int v1 = d1.find(u.f); int v2 = d1.find(u.s); if (v1 != v2) { adj[v1].pb(v2); adj[v2].pb(v1); } } for(int i =1 ;i <= n;++ i){ sort(all(adj[i])) ; adj[i].erase(unique(all(adj[i])) , adj[i].end()) ; } int ac = n - d1.comp ; for(int i = 1;i <= n;++ i){ if(sz(adj[i]) == ac - 1){ ans += d1.cnt[ 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...