// subtask 1
#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>
#include <set>
#include <map>
typedef long long ll;
const ll INF = 1e9;
using namespace std;
int link[200005], sz[200005];
int find(int x) {
    while (x != link[x]) x = link[x];
    return x;
}
void unite(int a, int b) {
    a = find(a);
    b = find(b);
    if (a == b) return;
    if (a != b) {
        if (sz[a] < sz[b]) swap(a, b);
        sz[a] += sz[b];
        link[b] = a;
    }
}
void solve()
{
    int n, m; cin >> n >> m;
    for (int i = 1; i <= n; i++) { link[i] = i; sz[i] = 1; }
    for (int i = 1; i <= m; i++) {
        int u, v; cin >> u >> v; char c; cin >> c;
        if (find(u) != find(v)) {
            unite(u, v);
        }
    }
    int cc = 0;
    for (int i = 1; i <= n; i++) {
        if (find(i) == i)++cc;
    }
    if (cc == 1) { cout << n << "\n"; }
    else cout << 0 << "\n";
}
int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    int t = 1;// cin >> t;
    while (t--) solve();
    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... |