結果
問題 | No.1390 Get together |
ユーザー |
|
提出日時 | 2021-02-12 21:48:09 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 50 ms / 2,000 ms |
コード長 | 1,861 bytes |
コンパイル時間 | 2,148 ms |
コンパイル使用メモリ | 195,452 KB |
最終ジャッジ日時 | 2025-01-18 18:20:11 |
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 29 |
ソースコード
#line 2 "/home/defineprogram/Desktop/Library/template/template.cpp"#include <bits/stdc++.h>using namespace std;#define ll long long#define rep(i, n) for (int i = 0; i < n; i++)#define REP(i, n) for (int i = 1; i < n; i++)#define rev(i, n) for (int i = n - 1; i >= 0; i--)#define REV(i, n) for (int i = n - 1; i > 0; i--)#define all(v) v.begin(), v.end()#define PL pair<ll, ll>#define PI pair<int,int>#define len(s) (int)s.size()template <class T, class U>inline bool chmin(T &a, U b) {if (a > b) {a = b;return true;}return false;}template <class T, class U>inline bool chmax(T &a, U b) {if (a < b) {a = b;return true;}return false;}constexpr ll inf = 3e18;#line 3 "/home/defineprogram/Desktop/Library/structure/UnionFind.cpp"class UnionFind {int N;vector<int> par, siz;public:int find(int x) {assert(x < N);return (par[x] == x ? x : par[x] = find(par[x]));}void merge(int x, int y) {assert(x < N && y < N);x = find(x);y = find(y);if (x == y) return;if (siz[x] > siz[y]) swap(x, y);par[x] = y;siz[y] += siz[x];}bool same(int x, int y) {return find(x) == find(y);}int size(int x) {return siz[find(x)];}UnionFind(int N) : N(N), siz(N, 1), par(N) {iota(all(par), 0);}};/*@brief Union Find@docs docs/UnionFind.md*/#line 3 "main.cpp"int N,M;int pre[1<<18];int main() {cin.tie(0); ios::sync_with_stdio(false);cin>>N>>M;memset(pre,-1,sizeof(pre));UnionFind uf(M);rep(i,N){int a,b;cin>>a>>b;a--;b--;if(pre[b]!=-1){uf.merge(a,pre[b]);}pre[b]=a;}int ans=0;rep(i,M)if(uf.find(i)!=i)ans++;cout<<ans<<"\n";}