제출 #1139139

#제출 시각아이디문제언어결과실행 시간메모리
1139139THXuanMonthly railway pass (LMIO18_menesinis_bilietas)C++20
100 / 100
280 ms68236 KiB
#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[500005], sz[500005]; set<int>adj[500005]; 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; } vector<pair<int, int>>a; for (int i = 1; i <= m; i++) { int u, v; cin >> u >> v; char c; cin >> c; if (find(u) != find(v) && c == 'T') { unite(u, v); } else { a.push_back({ u, v }); } } for (auto x : a) { int u = find(x.first); int v = find(x.second); if (u != v) { adj[u].insert(v); adj[v].insert(u); } } int cc = 0; for (int i = 1; i <= n; i++) { if (find(i) == i)++cc; } int ans = 0; for (int i = 1; i <= n; i++) { if (find(i) == i && adj[i].size() == cc - 1)ans += sz[i]; } cout << ans << "\n"; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); int t = 1;// cin >> t; while (t--) solve(); 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...