Submission #1179069

#TimeUsernameProblemLanguageResultExecution timeMemory
1179069prideliqueeeMonthly railway pass (LMIO18_menesinis_bilietas)C++20
100 / 100
267 ms38432 KiB
#include<bits/stdc++.h>
using namespace std;
#define int long long 
#define f first
#define s second
int p[500010];
int root(int u)
{
    if(p[u]==u)
    return u;
    return p[u]=root(p[u]);
}
signed main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    int n,m;
    cin>>n>>m;
    int cnt=n;
    for(int i=1;i<=n;i++)
    p[i]=i;
    vector<pair<int,int>> w;
    for(int i=0;i<m;i++)
    {
        int u,v;
        char c;
        cin>>u>>v>>c;
        if(c=='A')
        {
            w.push_back({u,v});
        }
        else
        {
            if(root(u)==root(v))
            continue;
            cnt--;
            p[root(u)]=root(v);
        }
    }
    set<pair<int,int>> s;
    int sum[n+1];
    memset(sum,0,sizeof sum);
    for(auto x:w)
    {
        int u=x.f,v=x.s;
        u=root(u),v=root(v);
        if(u==v)
        continue;
        if(u>v)
        swap(u,v);
        if(s.count({u,v})==1)
        continue;
        sum[u]++;
        sum[v]++;
        s.insert({u,v});
    }
    int ans=0;
    for(int i=1;i<=n;i++)
    {
        int u=root(i);
        if(sum[u]==cnt-1)
        ans++;
    }
    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...