Submission #64809354
Source Code Expand
Copy
#include <stdio.h>#define UF_MAX 212345int uf[UF_MAX];void uf_init(void) {int i;for (i = 0; i < UF_MAX; i++) uf[i] = -1;}int uf_root(int node) {if (uf[node] < 0) return node;return uf[node] = uf_root(uf[node]);}int uf_size(int node) {return -uf[uf_root(node)];}int uf_issame(int a, int b) {
#include <stdio.h>
#define UF_MAX 212345
int uf[UF_MAX];
void uf_init(void) {
int i;
for (i = 0; i < UF_MAX; i++) uf[i] = -1;
}
int uf_root(int node) {
if (uf[node] < 0) return node;
return uf[node] = uf_root(uf[node]);
}
int uf_size(int node) {
return -uf[uf_root(node)];
}
int uf_issame(int a, int b) {
return uf_root(a) == uf_root(b);
}
void uf_merge(int a, int b) {
int ar = uf_root(a);
int br = uf_root(b);
if (ar != br) {
int as = uf_size(ar);
int bs = uf_size(br);
if (as <= bs) {
uf[br] += uf[ar];
uf[ar] = br;
} else {
uf[ar] += uf[br];
uf[br] = ar;
}
}
}
int N, M;
int u[212345], v[212345];
int cnt[212345];
char visited[212345];
int main(void) {
int i;
int ans = 0;
if (scanf("%d%d", &N, &M) != 2) return 1;
uf_init();
for (i = 0; i < M; i++) {
if (scanf("%d%d", &u[i], &v[i]) != 2) return 1;
uf_merge(u[i], v[i]);
}
/* 連結成分ごとの辺の数を求める */
for (i = 0; i < M; i++) {
cnt[uf_root(u[i])]++;
}
/* 連結成分ごとに余計な辺の数を足す */
for (i = 1; i <= N; i++) {
int r = uf_root(i);
if (!visited[r]) {
ans += cnt[r] - (uf_size(r) - 1);
visited[r] = 1;
}
}
printf("%d\n", ans);
return 0;
}
Submission Info
| Submission Time | |
|---|---|
| Task | C - Make it Forest |
| User | mikecat |
| Language | C (gcc 12.2.0) |
| Score | 350 |
| Code Size | 1279 Byte |
| Status | AC |
| Exec Time | 37 ms |
| Memory | 5072 KB |
Judge Result
| Set Name | Sample | All | ||||
|---|---|---|---|---|---|---|
| Score / Max Score | 0 / 0 | 350 / 350 | ||||
| Status |
|
|
| Set Name | Test Cases |
|---|---|
| Sample | 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt |
| All | 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 01_random_00.txt, 01_random_01.txt, 01_random_02.txt, 01_random_03.txt, 01_random_04.txt, 01_random_05.txt, 01_random_06.txt, 01_random_07.txt, 01_random_08.txt, 01_random_09.txt, 01_random_10.txt, 01_random_11.txt, 02_min_00.txt, 02_min_01.txt, 03_max_00.txt |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| 00_sample_00.txt | AC | 1 ms | 2552 KB |
| 00_sample_01.txt | AC | 1 ms | 2544 KB |
| 00_sample_02.txt | AC | 1 ms | 2408 KB |
| 01_random_00.txt | AC | 32 ms | 4684 KB |
| 01_random_01.txt | AC | 30 ms | 4664 KB |
| 01_random_02.txt | AC | 36 ms | 4824 KB |
| 01_random_03.txt | AC | 37 ms | 5072 KB |
| 01_random_04.txt | AC | 30 ms | 4500 KB |
| 01_random_05.txt | AC | 26 ms | 4472 KB |
| 01_random_06.txt | AC | 32 ms | 4588 KB |
| 01_random_07.txt | AC | 36 ms | 4944 KB |
| 01_random_08.txt | AC | 26 ms | 4272 KB |
| 01_random_09.txt | AC | 27 ms | 4532 KB |
| 01_random_10.txt | AC | 32 ms | 4504 KB |
| 01_random_11.txt | AC | 37 ms | 4996 KB |
| 02_min_00.txt | AC | 1 ms | 2548 KB |
| 02_min_01.txt | AC | 2 ms | 2648 KB |
| 03_max_00.txt | AC | 23 ms | 4004 KB |