python图论

class UF:
    def __init__(self, n):
        self.n = n 
        self.FA = list(range(n)) 
    def getroot(self,x):
        path = []
        while x != self.FA[x]:
            path.append(x)
            x = self.FA[x]
        for w in path:
            self.FA[w] = x
        return x
    def union(self ,x, y): 
        rx,ry = self.getroot(x),self.getroot(y) 
        if rx == ry : return False 
        self.FA[rx] = ry 
        return True  
    def getgroup(self, vertexes):
        G = defaultdict(list)
        for i in vertexes:
            G[self.getroot(i)].append(i)
        return G
#下标从1开始
class UF:
    def __init__(self,n,cp=None):
        if cp: self.Fa = cp.Fa[:]
        else : self.Fa = [n] + [-1] * n  
    def getroot(self,i):
        root = i 
        while self.Fa[root] >= 0 :
            root =self.Fa[root]  
        while i != root : 
            tmp,self.Fa[i] = self.Fa[i],root 
            i = tmp  
        return root 
    def union(self,a,b):
        ra,rb = self.getroot(a),self.getroot(b)  
        if ra != rb: 
            self.Fa[0] -= 1  
            self.Fa[rb] += self.Fa[ra] 
            self.Fa[ra] = rb
            return True 
        return False  
        m , n = len(grid) , len(grid[0]) 
        def push(i,j):
            if grid[i][j] == 0 : 
                grid[i][j] = 1 
                q.append([i,j])
        res = 0 
        q = deque()
        for i in range(m):
            for j in range(n):
                if grid[i][j]: continue 
                flag = 1
                push(i,j) 
                while q :
                    x,y = q.popleft() 
                    for nx,ny in [(x,y+1),(x+1,y),(x,y-1),(x-1,y)] :
                        if not (0<=nx<m and 0<=ny<n):
                            flag = 0 
                        else: 
                            push(nx,ny) 
                res += flag 
        return res
        n = len(nums)
        time_in = [0] * n 
        time_out = [0] * n 
        G = [[] for _ in range(n+1)] 
        for a,b in edges:
            G[a].append(b)
            G[b].append(a) 
        clock = 0 
        def dfs(i,fa):
            nonlocal clock 
            clock += 1 
            time_in[i] = clock 
            for j in G[i]: 
                if j != fa : 
                    dfs(j,i) 
                    nums[i] ^= nums[j] 
            time_out[i] = clock 
        dfs(0,-1)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值