結果
問題 | No.2072 Anatomy |
ユーザー |
![]() |
提出日時 | 2022-09-16 22:16:11 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 450 ms / 2,000 ms |
コード長 | 1,489 bytes |
コンパイル時間 | 415 ms |
コンパイル使用メモリ | 82,048 KB |
実行使用メモリ | 103,740 KB |
最終ジャッジ日時 | 2024-12-21 21:26:14 |
合計ジャッジ時間 | 8,204 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 27 |
ソースコード
from collections import defaultdict, dequefrom heapq import heappush, heappopfrom itertools import permutations, accumulateimport sysimport mathimport bisectdef LI(): return [int(x) for x in sys.stdin.readline().split()]def I(): return int(sys.stdin.readline())def IR(n):return [I() for _ in range(n)]def LIR(n):return [LI() for _ in range(n)]sys.setrecursionlimit(1000000)mod = 1000000007class UnionFind:__slots__ = ["par", "rank", "size"]def __init__(self, n):self.par = list(range(n))self.rank = [0]*nself.size = [1]*ndef root(self, x):if x == self.par[x]:return xself.par[x] = self.root(self.par[x])return self.par[x]def unite(self, x, y):x = self.root(x)y = self.root(y)if self.rank[x] < self.rank[y]:self.par[x] = yself.size[y] += self.size[x]else:self.par[y] = xself.size[x] += self.size[y]if self.rank[x] == self.rank[y]:self.rank[x] += 1returndef main():n,m = LI()edges = LIR(m)uf = UnionFind(n)f = [0]*nfor a,b in reversed(edges):a -= 1b -= 1ra = uf.root(a)rb = uf.root(b)if ra != rb:uf.unite(a,b)f[uf.root(a)] = max(f[ra],f[rb])+1else:f[ra] += 1print(max(f))returnif __name__ == "__main__":main()