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
AC × 3
AC × 22
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