제출 #1139330

#제출 시각아이디문제언어결과실행 시간메모리
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...