HDU1232 畅通project 并查集
2024-08-31 14:13:32
这道题跟HDU 1213 How Many Tables 并查集很接近,都是赤裸裸的并查集的题。
思路:如果还须要建n-1条路。每并一次就自减1。
參考代码:
#include<stdio.h>
int fa[1000];
int find(int u)
{
return fa[u]==u? u:fa[u]=find(fa[u]);
}
int main()
{
int i,n,m,u,v,x,y;
scanf("%d%d",&n,&m);
while (n)
{
for (i=1;i<=n;i++) fa[i]=i;
for (i=1;i<=m;i++)
{
scanf("%d%d",&u,&v);
x=find(u);y=find(v);
if (x!=y)
{
fa[x]=y;
n--;
}
}
n--;
printf("%d\n",n);
scanf("%d%d",&n,&m);
}
return 0;
}
优化:先用数组储存m组数,然后仅仅对这些节点的根节点
赋初值fa[u[i]]=u[i];fa[v[i]]=v[i];
參考代码:
#include<stdio.h>
int fa[1000],u[1000],v[1000];
int find(int u)
{
return fa[u]==u?u:fa[u]=find(fa[u]);
}
int main()
{
int i,n,m,x,y;
scanf("%d%d",&n,&m);
while (n)
{
for (i=1;i<=m;i++)
{
scanf("%d%d",&u[i],&v[i]);
fa[u[i]]=u[i];
fa[v[i]]=v[i];
}
for (i=1;i<=m;i++)
{
x=find(u[i]);y=find(v[i]);
if (x!=y)
{
fa[x]=y;
n--;
}
}
n--;
printf("%d\n",n);
scanf("%d%d",&n,&m);
}
return 0;
}
最新文章
- ajax之jsonp跨域请求
- 让IE10等支持classList2.0(转)
- C\C++ sizeof 陷阱&;&;总结
- python2.79安装
- android-ProgressBar
- 17. 星际争霸之php设计模式--职责链模式
- 从invoke简单理解反射
- Hbase之缓存扫描加快读取速度
- Ubuntu环境下Nutch+Tomcat 搭建简单的搜索引擎
- SonarQube(5.0.1) 环境的安装配置
- Valgrind 快速入门
- 浅谈开发中python通过os模块存储数据
- js分析 猫_眼_电_影 字体文件 @font-face
- AX2009里调用.NET DLL的效率问题
- linux中tomcat startup.sh出现commond not found
- 使用httpClient发送post请求连接restful接口
- cdnbest站点里设置防盗链
- 微信小程序github源码
- 软件工程结对作业01 psp表格
- 栈的实现与操作(C语言实现)