結果
問題 | No.556 仁義なきサルたち |
ユーザー | tkmst201 |
提出日時 | 2017-08-11 22:38:52 |
言語 | C++11 (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 5 ms / 2,000 ms |
コード長 | 1,530 bytes |
コンパイル時間 | 1,466 ms |
コンパイル使用メモリ | 163,440 KB |
実行使用メモリ | 6,820 KB |
最終ジャッジ日時 | 2024-10-12 21:21:17 |
合計ジャッジ時間 | 2,055 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 22 |
コンパイルメッセージ
main.cpp: In function ‘int main()’: main.cpp:77:22: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 77 | scanf("%d %d", &a, &b); | ~~~~~^~~~~~~~~~~~~~~~~
ソースコード
#include <bits/stdc++.h> using namespace std; #define FOR(i,a,b) for(int i=(a);i<(b);i++) #define REP(i,n) FOR(i,0,n) #define ALL(v) (v).begin(),(v).end() #define fi first #define se second template<typename A, typename B> inline bool chmax(A &a, B b) { if (a<b) { a=b; return 1; } return 0; } template<typename A, typename B> inline bool chmin(A &a, B b) { if (a>b) { a=b; return 1; } return 0; } typedef long long ll; typedef pair<int, int> pii; typedef pair<ll, ll> pll; typedef pair<int, pii> pip; const ll INF = 1ll<<29; const ll MOD = 1000000007; const double EPS = 1e-10; const bool debug = 0; //---------------------------------// struct UnionFind { vector<int> par, rank; vector<int> cnt; UnionFind(int n) { par.resize(n); rank.resize(n); cnt.resize(n); REP(i, n) { par[i] = i; rank[i] = i; cnt[i] = 1; } } int operator[] (int x) { return find(x); } int find(int x) { if (x == par[x]) return x; return par[x] = find(par[x]); } void unite(int x, int y) { x = find(x); y = find(y); if (x == y) return; if (cnt[x] < cnt[y]) swap(x, y); else if (cnt[x] == cnt[y]) { if (rank[x] > rank[y]) swap(x, y); } par[y] = x; cnt[x] += cnt[y]; } bool same(int x, int y) { return find(x) == find(y); } int size(int x) { return cnt[find(x)]; } }; int N, M; int main() { cin >> N >> M; UnionFind uf(11234); REP(i, M) { int a, b; scanf("%d %d", &a, &b); a--; b--; uf.unite(a, b); } REP(i, N) printf("%d\n", uf[i] + 1); return 0; }