1 solutions
-
0
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