Submission #1239127

#TimeUsernameProblemLanguageResultExecution timeMemory
1239127asdfghqwertMonthly railway pass (LMIO18_menesinis_bilietas)C++20
100 / 100
222 ms61256 KiB
//#pragma GCC optimize("O3,unroll-loops,fast-math")
#pragma GCC optimize("O3,Ofast")
//#pragma GCC target("avx,avx2,fma")
#include <bits/stdc++.h>
typedef int ll;
using namespace std;
int32_t main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int n , m , ans = 0;cin >> n >> m;
    vector<vector<int>> g(n + 1);
    vector<vector<int>> g2(n + 1);
    for(int i = 1 ; i <= m ; i++){
        char ty;
        int u , v;cin >> u >> v >> ty;
        if(ty == 'T'){g[u].push_back(v); g[v].push_back(u);}
        if(ty == 'A'){g2[u].push_back(v); g2[v].push_back(u);}
    }
    vector<bool> seen (n + 1);vector<int> vc(n + 1);
    vector<vector<int>> components;
    for(int i = 1 ; i <= n ; i++){
        if(seen[i])continue;
        vector<int> vertex , que = {i};
        seen[i] = 1;
        while(!que.empty()){
            int u = que.back();
            vertex.push_back(u);
            que.pop_back();
            for(int v : g[u]){
                if(seen[v])continue;
                que.push_back(v);
                seen[v] = 1;
            }
        }
        int idx = components.size();
        components.push_back(vertex);
    }
    vector<bool> mark(components.size());
    for(int p = 0 ; p < components.size() ; p++)for(int &u : components[p])vc[u] = p;
    for(int p = 0 ; p < components.size() ; p++){
        vector<int> opr = {p};
        int cnt = 1 ;
        mark[p] = 1;
        for(int &u : components[p]){
            for(int v : g2[u]){
                if(!mark[vc[v]]){
                    opr.push_back(vc[v]);
                    mark[vc[v]] = 1;
                    cnt++;
                }
            }
        }
        if(cnt == components.size())ans+= components[p].size();
        for(int &u : opr)mark[u] = 0;
    }
    cout << ans;
}
#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...