• + 1 comment

    def find_wire(m, q, games, wires): # Create a union-find set uf = UnionFind(m)

    # Iterate through the wires
    for wire in wires:
        # Connect the two friends and merge their groups
        uf.union(wire[0]-1, wire[1]-1)
    
        # Check if the group that the friends belong to now contains all the friends
        # in the same game
        game = games[wire[0]-1]
        if uf.find(game-1) == uf.find(game):
            print(wire[0])
            return
    
    # If no group contains all the friends in the same game, print -1
    print(-1)
    

    Union-find set class

    class UnionFind: def init(self, n): self.parent = [i for i in range(n)] self.size = [1] * n

    def find(self, x):
        if self.parent[x] != x:
            self.parent[x] = self.find(self.parent[x])
        return self.parent[x]
    
    def union(self, x, y):
        x_root = self.find(x)
        y_root = self.find(y)
        if x_root == y_root:
            return
        if self.size[x_root] < self.size[y_root]:
            self.parent[x_root] = y_root
            self.size[y_root] += self.size[x_root]
        else:
            self.parent[y_root] = x_root
            self.size[x_root] += self.size[y_root]
    

    Read input

    m, n, q = map(int, input().split()) games = list(map(int, input().split())) wires = [tuple(map(int, input().split())) for _ in range(q)]

    Find the wire

    find_wire(m, q, games, wires)