Submission #235225

#TimeUsernameProblemLanguageResultExecution timeMemory
235225rama_pangMonthly railway pass (LMIO18_menesinis_bilietas)C++14
100 / 100
207 ms29668 KiB
#include <bits/stdc++.h>
using namespace std;
using lint = long long;

const int MAXN = 500005;

int N, M;
vector<int> adj[MAXN];

int p[MAXN];
int Find(int x) {
  return p[x] == x ? x : p[x] = Find(p[x]);
}

int main() {
  ios::sync_with_stdio(0);
  cin.tie(0), cout.tie(0);

  cin >> N >> M;
  iota(p, p + MAXN, 0);

  vector<pair<int, int>> edge;
  for (int i = 0; i < M; i++) {
    int u, v;
    string s;
    cin >> u >> v >> s;
    if (s == "T") {
      p[Find(u)] = Find(v);
    } else {
      edge.emplace_back(u, v);
    }
  }

  int cc = 0;
  for (int i = 1; i <= N; i++) {
    if (Find(i) == i) {
      cc++;
    }
  }

  vector<pair<int, int>> se;
  for (auto e : edge) {
    int u = e.first;
    int v = e.second;
    u = Find(u);
    v = Find(v);
    if (u == v) continue;
    se.emplace_back(min(u, v), max(u, v));
  }
  sort(begin(se), end(se));
  se.resize(unique(begin(se), end(se)) - begin(se));

  vector<int> deg(N + 1);
  for (auto i : se) {
    deg[i.first]++;
    deg[i.second]++;
  }

  int ans = 0;
  for (int i = 1; i <= N; i++) {
    if (deg[Find(i)] == cc - 1) {
      ans++;
    }
  }

  cout << ans << "\n";
  return 0;
}
#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...