Submission #64809354


Source Code Expand

Copy
#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) {
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
#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
AC × 3
AC × 18
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


2025-04-13 (Sun)
09:28:09 +09:00