#include <bits/stdc++.h>
#define ll long long int
#define pb push_back
#define fi first
#define se second
using namespace std;
int par[500005], sz[500005];
set<ll> adj[500005];
int find(int a) {
if (par[a] == a) return a;
return par[a] = find(par[a]);
}
void merge(int a, int b) {
a = find(a); b = find(b);
if (a == b) return;
if (sz[a] < sz[b]) swap(a, b);
par[b] = a; sz[a] += sz[b]; sz[b] = 0;
}
int main() {
int n, m; cin >> n >> m;
vector<pair<ll,ll>> bus;
for (int i = 1; i <= n; i++) {
par[i] = i; sz[i] = 1;
}
for (int i = 0; i < m; i++) {
int a, b; char c;
cin >> a >> b >> c;
if (c == 'A') bus.pb({a, b});
else merge(a, b);
}
for (int i = 0; i < bus.size(); i++) {
int a = bus[i].fi, b = bus[i].se;
a = find(a); b = find(b);
adj[a].insert(b); adj[b].insert(a);
}
int cc = n; vector<int> ld;
for (int i = 1; i <= n; i++) {
if (sz[i] == 0) cc--;
else ld.pb(i);
}
int cnt = 0;
for (auto x : ld) {
if (adj[x].size() == cc-1) {
cnt += sz[x];
}
}
cout << cnt;
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... |