1 solutions

  • 0
    @ 2025-11-5 15:29:34

    C++ :

    #include<iostream>
    #include<algorithm>
    using namespace std;
    int fd[30005],sum[30005];
    int f(int x){
    	while(fd[x]!=x) x=fd[x];
    	return x;
    }
    int main(){
    	int n,m,k1,k2,x,y;
    	cin>>n>>m;
    	for (int i=1;i<=n;i++) fd[i]=i;
    	for (int i=1;i<=m;i++){
    		cin>>x>>y;
    		k1=f(x);
    		k2=f(y);
    		if (k1!=k2) fd[k2]=fd[x]=fd[y]=k1; 
    	}
    	for (int i=1;i<=n;i++)
    		sum[f(fd[i])]++;
    	int ans=0;
    	for (int i=1;i<=n;i++)
    		ans=max(ans,sum[i]);
    	cout<<ans;
    	return 0;
    }
    

    Python :

    # coding=utf-8
    import sys
    
    class UnionFind:
        def __init__(self, size):
            self.parent = [i for i in range(size)]
            self.rank = [0] * size
            self.size = [1] * size  # Initialize the size for each component
            self.max_size = 1
    
        def find(self, node):
            if self.parent[node] != node:
                self.parent[node] = self.find(self.parent[node])  # Path compression
            return self.parent[node]
    
        def union(self, node1, node2):
            root1 = self.find(node1)
            root2 = self.find(node2)
    
            if root1 != root2:
                if self.rank[root1] < self.rank[root2]:
                    self.parent[root1] = root2
                    self.size[root2] += self.size[root1]
                    self.max_size = max(self.max_size, self.size[root2])
                elif self.rank[root1] > self.rank[root2]:
                    self.parent[root2] = root1
                    self.size[root1] += self.size[root2]
                    self.max_size = max(self.max_size, self.size[root1])
                else:
                    self.parent[root2] = root1
                    self.rank[root1] += 1
                    self.size[root1] += self.size[root2]
                    self.max_size = max(self.max_size, self.size[root1])
    
    def main():
        # Read the first line of input
        n, m = map(int, sys.stdin.readline().split())
        uf = UnionFind(n + 1)  # Initialize UnionFind with one extra space for 1-indexed input
    
        # Process each friend pair
        for _ in range(m):
            a, b = map(int, sys.stdin.readline().split())
            uf.union(a, b)
    
        # Output the size of the largest friend group
        print(uf.max_size)
    
    if __name__ == "__main__":
        main()
    
    
    • 1

    Information

    ID
    16850
    Time
    2000ms
    Memory
    128MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By