• hdu 1856 并差集求最大秩


    //并差集求最大秩
    //一堆学生间接或直接互为朋友则合并
    //人数最多的集和的人数即为最大秩
    //不知道为什么G++超时但是C++过了
    #include <iostream>
    using namespace std;
    
    int Father[10000001];
    int Rank[10000001];
    int T;
    int Max;
    
    void Make_Set(int x)
    {
    	Father[x] = x;
    	Rank[x] = 1;
    }
    
    int Find(int x)
    {
    	while(x != Father[x])
    	{
    		x = Father[x];
    	}
    	return x;
    }
    
    void Union(int x,int y)
    {
    	x = Find(x);
    	y = Find(y);
    	if(x == y)
    		return;
    	if(Rank[x] > Rank[y])
    	{
    		Father[y] = x;
    		Rank[x] += Rank[y];
    		if(Max < Rank[x])
    			Max = Rank[x];
    	}
    	else
    	{
    		Father[x] = y;
    		Rank[y] += Rank[x];
    		if(Max < Rank[y])
    			Max = Rank[y];
    	}
    }
    
    int main()
    {
    	while(cin>>T)
    	{
    		int x,y;
    		Max = 1; 
    		for(long i = 0; i <= 10000000; i++)
    		{
    			Make_Set(i);
    		}
    		for(int i = 1; i <= T; i++)
    		{
    			cin>>x>>y;
    			Union(x,y);
    		}
    		cout<<Max<<endl;
    	}	
    	return 0; 
    }
     


  • 相关阅读:
    html表格,table标签
    2-3VRP的基本配置
    6 sys模块
    3 datetime模块
    2 time模块
    1 模块和包的介绍
    12 函数进阶---生成器
    13 函数进阶---迭代器
    10 函数进阶---闭包
    11 函数进阶---装饰器
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3020162.html
Copyright © 2020-2023  润新知