Submission #1327899

#TimeUsernameProblemLanguageResultExecution timeMemory
1327899Zone_zoneeMonthly railway pass (LMIO18_menesinis_bilietas)C++20
100 / 100
490 ms68688 KiB
#include <bits/stdc++.h>
using namespace std;
const int N = 5e5+10;

set<int> adj[N];
vector<pair<int, int>> edge;
int par[N], sz[N];
bool vis[N];
int fp(int u){
    return par[u] = (u == par[u] ? u : fp(par[u]));
}
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    int n, m;
    cin >> n >> m;
    iota(par, par+n+1, 0);
    for(int i = 1; i <= n; ++i) sz[i] = 1;
    while(m--){
        int u, v;
        char c;
        cin >>  u >> v >> c;
        if(c == 'A'){
            edge.push_back({u, v});
        }else{
            int pu = fp(u), pv = fp(v);
            if(pu == pv) continue;
            if(sz[pu] > sz[pv]) swap(pu, pv);
            sz[pv] += sz[pu];
            par[pu] = pv;
        }
    }
    for(auto [u, v] : edge){
        u = fp(u), v = fp(v);
        if(u == v) continue;
        adj[u].insert(v);
        adj[v].insert(u);
    }
    int res = 0;
    for(int i = 1; i <= n; ++i){
        int p = fp(i);
        if(vis[p]) continue;
        vis[p] = 1;
        int sum = sz[p];
        // if(i == 1) cout << sum << '\n';
        for(auto v : adj[p]){
            // if(i == 1) cout << sz[fp(v)] << '\n';
            sum += sz[fp(v)];
        }
        if(sum == n)
        // cout << "dbg : " << i << ' ' << p << '\n';
        if(sum == n) res += sz[p];
    }
    cout << res << '\n';
}
#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...