#include <bits/stdc++.h>
using namespace std;
const int NMAX=5e5+5;
vector<int> adjt[NMAX], adja[NMAX], cc[NMAX];
int ntc[NMAX], viz[NMAX], nviz=1, ncc, n, m;
void DFS(int u)
{
ntc[u]=ncc;
cc[ncc].push_back(u);
viz[u]=1;
for(auto v:adjt[u])
if(viz[v]!=1)
DFS(v);
}
int main()
{
cin>>n>>m;
for(int i=1;i<=m;i++)
{
int u, v;
char ch;
cin>>u>>v>>ch;
if(ch=='T')
{
adjt[u].push_back(v);
adjt[v].push_back(u);
}
else
{
adja[u].push_back(v);
adja[v].push_back(u);
}
}
for(int i=1;i<=n;i++)
if(viz[i]!=1)
{
ncc++;
DFS(i);
}
int ans=0;
for(int i=1;i<=ncc;i++)
{
int cnt=1;
nviz++; viz[i]=nviz;
for(auto u:cc[i])
for(auto v:adja[u])
if(viz[ntc[v]]!=nviz)
{
viz[ntc[v]]=nviz;
cnt++;
}
if(cnt==ncc)
ans+=cc[i].size();
}
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... |