hdu 1232 畅通工程【并查集】【模板题】

hdu 1232 畅通工程 

#include<iostream>
#include<string.h>
using namespace std;
int pre[1005];
int find (int x)
{
	int r=x;
	while(pre[r]!=r)
	r=pre[r];
	
	int i=x;
	int j;
	while(i!=r)
	{
		j=pre[i];
		pre[i]=r;
		i=j;
	}
	return r;
}
void join (int x,int y)
{
	int fx=find(x);   //选择根节点
	int fy=find(y);
	if (fx!=fy)
	{
		pre[fx]=fy;
	}
}

int main()
{
	int N,M,a,b,i;
	while(cin>>N>>M && N)
	{
		for(i=1;i<=N;i++)//初始化pre[] 
		{
			pre[i]=i;//每个城市都是独立的。把=写成了==,找了好久的bug 
		}
		
		for(i=1;i<=M;i++)
		{
			cin>>a>>b;
			join(a,b);
		}
		
		int ans=0;
		for(i=1;i<=N;i++)
		{
			//if(i==find(i))//找到一个根节点,ans++ 
			if(pre[i]==i)
			{
			ans++;
			}	
		}
//		for(int i=1;i<=N;++i)   //【测试】依次输出1~n的根节点 
//		 	cout<<find(i)<<" ";
//		 	cout<<endl;
		cout<<ans-1<<endl;
	}
	return 0;
}

 

//另开一个数组t[],存是不是根节点
#include<cstring>
#include<iostream>
using namespace std;
int pre[1005];
int find(int x)
{
	int r=x;
	while(r!=pre[r])   //寻找根节点,(pre[r]是 r 的 上级,) 
	r=pre[r];
	int i=x,j;
	while(i!=r)        //压缩路径,使得每一个子节点的上级直接为根节点,省去层层回溯 
	{ 
	    j=pre[i];
		pre[i]=r;
		i=j;
	}
	return r;
}
 
void join(int a,int b)
{ 
	int fx=find(a);   //选择根节点
	int fy=find(b);   //选择根节点 
	if(fx!=fy)        //若相等,即为同一根节点,否则,用跟节点进行合并  
	{
		pre[fx]=fy;   //根节点合并  
	}
} 
 
int main()
{
	int n,m;
	while(cin>>n>>m&&n)
	{
		
		bool t[1005];          //用来做最终统计 
		int ans=-1;
		memset(t,0,sizeof(t));
		
		for(int i=1;i<=n;++i)
		pre[i]=i;              //初始化 
		
		int a,b;
		for(int i=1;i<=m;++i)
		{
			cin>>a>>b;
			join(a,b);          //合并操作 
		}
		
		for(int i=1;i<=n;++i)//i是根节点,t[i]=1 
		    t[(find(i))]=1;	  
		    
		
		for(int i=1;i<=n;++i)//统计根节点个数 
		    if(t[i])
			ans++; 
//		for(int i=1;i<=n;++i)   //【测试】依次输出1~n的根节点 
//		 	cout<<find(i)<<" ";
//		 	cout<<endl;
//		for(int i=1;i<=n;++i)  //【测试】i是根节点,t[i]=1 ,否则 t[i]=0 
//		 	cout<<t[i]<<" ";	
//			cout<<endl; 	
		cout<<ans<<endl;
	}
	return 0; 
} 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本系统的研发具有重大的意义,在安全性方面,用户使用浏览器访问网站时,采用注册和密码等相关的保护措施,提高系统的可靠性,维护用户的个人信息和财产的安全。在方便性方面,促进了校园失物招领网站的信息化建设,极大的方便了相关的工作人员对校园失物招领网站信息进行管理。 本系统主要通过使用Java语言编码设计系统功能,MySQL数据库管理数据,AJAX技术设计简洁的、友好的网址页面,然后在IDEA开发平台中,编写相关的Java代码文件,接着通过连接语言完成与数据库的搭建工作,再通过平台提供的Tomcat插件完成信息的交互,最后在浏览器中打开系统网址便可使用本系统。本系统的使用角色可以被分为用户和管理员,用户具有注册、查看信息、留言信息等功能,管理员具有修改用户信息,发布寻物启事等功能。 管理员可以选择任一浏览器打开网址,输入信息无误后,以管理员的身份行使相关的管理权限。管理员可以通过选择失物招领管理,管理相关的失物招领信息记录,比如进行查看失物招领信息标,修改失物招领信息来源等操作。管理员可以通过选择公告管理,管理相关的公告信息记录,比如进行查看公告详情,删除错误的公告信息,发布公告等操作。管理员可以通过选择公告类型管理,管理相关的公告类型信息,比如查看所有公告类型,删除无用公告类型,修改公告类型,添加公告类型等操作。寻物启事管理页面,此页面提供给管理员的功能有:新增寻物启事,修改寻物启事,删除寻物启事。物品类型管理页面,此页面提供给管理员的功能有:新增物品类型,修改物品类型,删除物品类型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值