Submission #62540348
Source Code Expand
class DisjointSet():
def __init__(self,size : int) -> None:
self.parent = [i for i in range(size)] # Sets parent of every node to itself
self.rank = [0 for _ in range(size)] # Sets the size of every set to 1
def find_set(self,v : int) -> int:
if (self.parent[v] == v): return v
# Finds parents highest ancestor
parent = self.find_set(self.parent[v])
# Set current parent to highest ancestor
self.parent[v] = parent
return parent
def union(self,v : int, u : int) -> None:
# Find high parents of both nodes
a = self.find_set(v)
b = self.find_set(u)
if a == b: return
# Connects smaller tree to bigger tree
if (self.rank[a] > self.rank[b] ): a,b = b,a
self.parent[a] = b
# Incrases rank if both trees have same rank.
if (self.rank[b] == self.rank[a]): self.rank[b] += 1
n,m = map(int,input().split())
dsu = DisjointSet(n+1)
redundant = []
for i in range(m):
a,b = map(int,input().split())
if dsu.find_set(a) == dsu.find_set(b):
redundant.append((i+1,a,b))
else:
dsu.union(a,b)
seen = set()
for i in range(1,n+1):
seen.add(dsu.find_set(i))
res = []
for edge in redundant:
i, x, y = edge
par_i = dsu.find_set(x)
for j in seen:
if par_i != dsu.find_set(j):
res.append((i,x,j))
seen.remove(j)
dsu.union(x,j)
break
if len(seen) == 1:
break
print(len(res))
for i in res:
print(' '.join([*map(str,i)]))
Submission Info
| Submission Time | |
|---|---|
| Task | E - Cables and Servers |
| User | ui_beam |
| Language | Python (PyPy 3.10-v7.3.12) |
| Score | 450 |
| Code Size | 1677 Byte |
| Status | AC |
| Exec Time | 476 ms |
| Memory | 166344 KiB |
Judge Result
| Set Name | Sample | All | ||||
|---|---|---|---|---|---|---|
| Score / Max Score | 0 / 0 | 450 / 450 | ||||
| Status |
|
|
| Set Name | Test Cases |
|---|---|
| Sample | sample_01.txt, sample_02.txt, sample_03.txt |
| All | random_01.txt, random_02.txt, random_03.txt, random_04.txt, random_05.txt, random_06.txt, random_07.txt, random_08.txt, random_09.txt, random_10.txt, random_11.txt, random_12.txt, random_13.txt, random_14.txt, random_15.txt, random_16.txt, random_17.txt, random_18.txt, random_19.txt, sample_01.txt, sample_02.txt, sample_03.txt |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| random_01.txt | AC | 245 ms | 93240 KiB |
| random_02.txt | AC | 148 ms | 100460 KiB |
| random_03.txt | AC | 148 ms | 85536 KiB |
| random_04.txt | AC | 68 ms | 80864 KiB |
| random_05.txt | AC | 234 ms | 104532 KiB |
| random_06.txt | AC | 161 ms | 105476 KiB |
| random_07.txt | AC | 164 ms | 86468 KiB |
| random_08.txt | AC | 64 ms | 80640 KiB |
| random_09.txt | AC | 267 ms | 94072 KiB |
| random_10.txt | AC | 123 ms | 95748 KiB |
| random_11.txt | AC | 476 ms | 97088 KiB |
| random_12.txt | AC | 65 ms | 80824 KiB |
| random_13.txt | AC | 263 ms | 88108 KiB |
| random_14.txt | AC | 314 ms | 89552 KiB |
| random_15.txt | AC | 263 ms | 87780 KiB |
| random_16.txt | AC | 309 ms | 88088 KiB |
| random_17.txt | AC | 415 ms | 117632 KiB |
| random_18.txt | AC | 361 ms | 166344 KiB |
| random_19.txt | AC | 72 ms | 81408 KiB |
| sample_01.txt | AC | 58 ms | 76444 KiB |
| sample_02.txt | AC | 58 ms | 76228 KiB |
| sample_03.txt | AC | 59 ms | 76564 KiB |