結果

問題 No.556 仁義なきサルたち
ユーザー eve__fuyukieve__fuyuki
提出日時 2018-03-16 22:14:58
言語 C++11
(gcc 11.4.0)
結果
AC  
実行時間 21 ms / 2,000 ms
コード長 871 bytes
コンパイル時間 569 ms
コンパイル使用メモリ 56,240 KB
実行使用メモリ 5,376 KB
最終ジャッジ日時 2024-06-01 09:38:20
合計ジャッジ時間 1,639 ms
ジャッジサーバーID
(参考情報)
judge2 / judge1
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 2 ms
5,248 KB
testcase_01 AC 2 ms
5,376 KB
testcase_02 AC 1 ms
5,376 KB
testcase_03 AC 1 ms
5,376 KB
testcase_04 AC 2 ms
5,376 KB
testcase_05 AC 2 ms
5,376 KB
testcase_06 AC 3 ms
5,376 KB
testcase_07 AC 2 ms
5,376 KB
testcase_08 AC 2 ms
5,376 KB
testcase_09 AC 3 ms
5,376 KB
testcase_10 AC 3 ms
5,376 KB
testcase_11 AC 3 ms
5,376 KB
testcase_12 AC 4 ms
5,376 KB
testcase_13 AC 8 ms
5,376 KB
testcase_14 AC 10 ms
5,376 KB
testcase_15 AC 11 ms
5,376 KB
testcase_16 AC 17 ms
5,376 KB
testcase_17 AC 18 ms
5,376 KB
testcase_18 AC 20 ms
5,376 KB
testcase_19 AC 19 ms
5,376 KB
testcase_20 AC 21 ms
5,376 KB
testcase_21 AC 20 ms
5,376 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

#include<iostream>
using namespace std;
int parent[10001];
int data[10001];
int Find(int x){
    if(parent[x] == x) return x;
    else{
        return parent[x] = Find(parent[x]);
    }
}
void Union(int x,int y){
    int xroot = Find(x);
    int yroot = Find(y);
    if(data[xroot] < data[yroot] ||( (data[xroot] == data[yroot]) && xroot > yroot )){
        parent[xroot] = yroot;
        data[yroot] += data[xroot];
    }
    else{
        parent[yroot] = xroot;
        data[xroot] += data[yroot];
    }
}
bool isUnion(int x,int y){
    return Find(x) == Find(y);
}

int main(){
    int N,M,A,B;
    cin >> N >> M;
    for(int i=1;i<=N;i++){
        parent[i] = i;
        data[i] = 1;
    }
    for(int i=0;i<M;i++){
        cin >> A >> B;
        if(isUnion(A,B)) continue;
        Union(A,B);
    }
    for(int i=1;i<=N;i++) cout << Find(i) << endl;
    return 0;
}
0