#include <bits/stdc++.h>
using namespace std;
const int N=5e5+5;
vector<int> buses[N];
vector<int> trains[N];
set<int> adj[N];
int cnt, parent[N], sz[N];
bool vis[N];
void dfs(int i, int p){
vis[i]=true;
parent[i]=p;
sz[p]++;
for (auto x: trains[i]){
if (!vis[x]){
dfs(x, p);
}
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n,m;cin>>n>>m;
for (int i=0;i<m;i++){
int u,v;
char c;
cin>>u>>v>>c;
if (c=='A'){
//bus
buses[u].push_back(v);
buses[v].push_back(u);
}
else if (c=='T'){
//train
trains[u].push_back(v);
trains[v].push_back(u);
}
}
int k=1;
for (int i=1;i<=n;i++){
if (!vis[i]){
dfs(i, k);
k++;
}
}
for (int i=1;i<=n;i++){
for (auto x:buses[i]){
adj[parent[i]].insert(parent[x]);
adj[parent[x]].insert(parent[i]);
}
}
k--;
int ans=0;
for (int i=1;i<=k;i++){
if ((int)adj[i].size()==k-1){
ans+=sz[i];
}
}
cout<<ans;
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |