結果
| 問題 |
No.556 仁義なきサルたち
|
| ユーザー |
newlife171128
|
| 提出日時 | 2018-01-31 23:49:08 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 493 ms / 2,000 ms |
| コード長 | 1,989 bytes |
| コンパイル時間 | 1,655 ms |
| コンパイル使用メモリ | 159,308 KB |
| 実行使用メモリ | 5,248 KB |
| 最終ジャッジ日時 | 2024-12-30 00:02:15 |
| 合計ジャッジ時間 | 4,446 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 22 |
ソースコード
#include <bits/stdc++.h>
#include "bits/stdc++.h"
#include <iostream>
#include <iomanip>
#include <vector>
#include <algorithm>
#include <string>
#include <sstream>
#include <cmath>
#include <stack>
#include <queue>
#include <cctype>
#include <stdio.h>
#include <map>
#include <unordered_map>
#include <string.h>
#include <utility>
typedef long long ll;
#define INF (1e9+1)
#define rep(i,n) for(ll i=0;i<(ll)(n);i++)
using namespace std;
typedef pair<int, int> P;
int boss[10001];
int team_rank[10001];
int n, m;
void init(int v) {
for (int i = 1; i <= v; i++) {
boss[i] = i;
team_rank[i] = 1;
}
}
int find(int x) {
if (boss[x] == x) {
return x;
} else {
return boss[x] = find(boss[x]);
}
}
bool same(int a, int b) {
return find(a) == find(b);
}
void unite(int a, int b) {
int x = find(a);
int y = find(b);
if (x == y)
return;
if (team_rank[x] < team_rank[y]) {
for (int i = 1; i <= n; i++) {
if (same(i, x) && i !=x) {
boss[i] = y;
}
}
boss[x] = y;
team_rank[y] +=team_rank[x];
} else if (team_rank[x] > team_rank[y]) {
for (int i = 1; i <= n; i++) {
if (same(i, y) && i !=y) {
boss[i] = x;
}
}
boss[y] = x;
team_rank[x] +=team_rank[y];
} else {
if (x < y) {
for (int i = 1; i <= n; i++) {
if (same(i, y) && i !=y) {
boss[i] = x;
}
}
boss[y] = x;
team_rank[x] +=team_rank[y];
} else {
for (int i = 1; i <= n; i++) {
if (same(i, x) && i !=x) {
boss[i] = y;
}
}
boss[x] = y;
team_rank[y] +=team_rank[x];
}
}
}
int main() {
cin >> n >> m;
init(n);
int a, b;
for (int i = 0; i < m; i++) {
cin >> a >> b;
/*
cout << "a" << find(a) << " " << "b" << find(b) << endl;*/
unite(a, b);
/*
cout << "a" << a << " " << "b" << b << endl;
*/
/* for (int i = 1; i <= n; i++) {
cout << "boss" << boss[i] << " " << "teamrank" << team_rank[i]
<< endl;
}
cout << endl;*/
}
for (int i = 1; i <= n; i++) {
cout <<boss[i]<< endl;
}
}
newlife171128