这道题跟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;
}

最新文章

  1. ajax之jsonp跨域请求
  2. 让IE10等支持classList2.0(转)
  3. C\C++ sizeof 陷阱&amp;&amp;总结
  4. python2.79安装
  5. android-ProgressBar
  6. 17. 星际争霸之php设计模式--职责链模式
  7. 从invoke简单理解反射
  8. Hbase之缓存扫描加快读取速度
  9. Ubuntu环境下Nutch+Tomcat 搭建简单的搜索引擎
  10. SonarQube(5.0.1) 环境的安装配置
  11. Valgrind 快速入门
  12. 浅谈开发中python通过os模块存储数据
  13. js分析 猫_眼_电_影 字体文件 @font-face
  14. AX2009里调用.NET DLL的效率问题
  15. linux中tomcat startup.sh出现commond not found
  16. 使用httpClient发送post请求连接restful接口
  17. cdnbest站点里设置防盗链
  18. 微信小程序github源码
  19. 软件工程结对作业01 psp表格
  20. 栈的实现与操作(C语言实现)

热门文章

  1. linux环境下删除包含特殊字符的文件或目录
  2. 新建Eclipse工作空间,复制原有的配置(转)
  3. ASP.NET-关于Global.asax的作用
  4. npm --save 选项作用
  5. LeetCode——Copy List with Random Pointer
  6. html单行、多行文本溢出隐藏
  7. (转载) EditText初始不弹出软键盘,只有光标显示,点击再弹出
  8. hadoop 编译自己的jar包并运行
  9. 中级前端工程师要掌握的JavaScript 技巧
  10. ajax的异步请求小结