結果
問題 | No.1390 Get together |
ユーザー |
![]() |
提出日時 | 2021-02-12 21:41:34 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 214 ms / 2,000 ms |
コード長 | 1,025 bytes |
コンパイル時間 | 2,252 ms |
コンパイル使用メモリ | 207,428 KB |
最終ジャッジ日時 | 2025-01-18 18:11:49 |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 29 |
ソースコード
#include <bits/stdc++.h>using namespace std;class unionfind {vector<int> par;public:unionfind(int n) {for (int i = 0; i < n; i++) {par.push_back(i);}}int find(int n) {if (par.at(n) == n) return n;return par.at(n) = find(par.at(n));}void merge(int m, int n) {m = find(m);n = find(n);if (m == n) return;par.at(m) = n;}};int main() {int n, m;cin >> n >> m;vector<int> b(n), c(n);for (int i = 0; i < n; i++) {cin >> b.at(i) >> c.at(i);b.at(i)--;c.at(i)--;}vector<vector<int>> color(n);for (int i = 0; i < n; i++) {color.at(c.at(i)).push_back(b.at(i));}unionfind t(m);for (int i = 0; i < n; i++) {for (int v : color.at(i)) {t.merge(v, color.at(i).at(0));}}set<int> s;for (int i = 0; i < m; i++) {s.insert(t.find(i));}cout << m - s.size() << endl;}