From 21b8c089e249c2bba3327e323b13d8229f012455 Mon Sep 17 00:00:00 2001 From: yenru0 Date: Tue, 25 Mar 2025 10:42:37 +0900 Subject: [PATCH] complete 33650.py --- zeta_python/completed/33650.py | 64 ++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 zeta_python/completed/33650.py diff --git a/zeta_python/completed/33650.py b/zeta_python/completed/33650.py new file mode 100644 index 0000000..fd9bb97 --- /dev/null +++ b/zeta_python/completed/33650.py @@ -0,0 +1,64 @@ +import sys + +input = sys.stdin.readline + + +class TriangleTrees: + def __init__(self, n, m, e): + """ + input graph should be triangle-trees + """ + self.n, self.m = n, m + self.e: list[int] = e + self.e_find: list[list[int]] = [[] for _ in range(self.n)] + for u, v in self.e: + self.e_find[u - 1].append(v - 1) + self.e_find[v - 1].append(u - 1) + + def check_cycle(self) -> bool: + D = [(-1, i) for i in range(self.n)] + vis = [0] * self.n + cycle_flag = False + while D: + before, now = D.pop() + if vis[now]: + continue + vis[now] = 1 + for nxt in self.e_find[now]: + if nxt == before: + continue + elif vis[nxt]: + cycle_flag = True + break + else: + D.append((now, nxt)) + if cycle_flag: + break + return cycle_flag + + def solve(self) -> list[int]: + K_MAX = 3 if self.check_cycle() else 2 + vis = [0] * self.n + colour = [-1] * self.n + + D = [(i, i) for i in range(self.n)] + while D: + (before, now) = D.pop() + if vis[now]: + continue + else: + vis[now] = 1 + + now_color = (colour[before] + 1) % K_MAX + colour[now] = now_color + + for nxt in self.e_find[now]: + if not vis[nxt]: + D.append((now, nxt)) + return colour + + +if __name__ == "__main__": + n, m = map(int, input().split()) + e = [tuple(map(int, input().split())) for _ in range(m)] + print(*map(lambda x: x + 1, TriangleTrees(n, m, e).solve()), sep=" ")