http://acm.hdu.edu.cn/showproblem.php?pid=1272

这道题就是求图是不是连通无环,我觉得其实就是看看图是不是一棵最小生成树。

所以要是图满足条件,就必然有n个节点,n-1条边。但是题目中若只有 0 0一组数据也是可以的!!!!!这里WA了好多回。

所以我首先采用stl里面的set来直接判断:

  

#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cmath>
#include<set>
#include<cstring>
using namespace std;
const int maxn = ;
int n, m; int main()
{
set<int> s;
int x, y;
int tot = ;
while (scanf("%d%d", &x, &y) == )
{
if (x == - && y == -) break;
if (x == && y == ) printf("Yes\n");//!!!特判一下!!!
else
{
tot++, s.insert(x), s.insert(y);//把点加入set,tot计录边的数目
for (int i = ;; i++) {
scanf("%d%d", &x, &y);
if (x == && y == ) {
if (s.size() == tot + )
printf("Yes\n");
else
printf("No\n");
s.clear();
tot = ;
break;
}
s.insert(x), s.insert(y);
tot++;
}
}
}
return ;
}

当然,原本的做法是用并查集,效率比set高很多:

 

#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cmath>
#include<set>
#include<cstring>
using namespace std;
const int maxn=;
int n,m;
int f[maxn],flag[maxn]; int find(int x)
{
return f[x]==x?x:f[x]=find(f[x]);
} int Union(int x,int y)
{
int rx=find(x);
int ry=find(y);
if (rx==ry){
return ;
}else{
f[rx]=ry;
return ;
}
} int main()
{
int x,y,t,Flag;
while(scanf("%d%d",&x,&y)==)
{
memset(flag,,sizeof(flag));
for (int i=;i<=maxn;i++) f[i]=i;
if (x==-&&y==-) break;
if (x==&&y==) printf("Yes\n");
else
{
Union(x,y);
flag[x]=,flag[y]=;//记录点已在图中
t=,Flag=;//开始存在一棵树。没有环。
while(scanf("%d%d",&x,&y)==)
{
if (x==&&y==) break;
if (flag[x]==){t++,flag[x]=;}//x是新节点,树+1
if (flag[y]==){t++,flag[y]=;}//y是新节点,树+1
if (Union(x,y)==) Flag=;//存在回路
else t--;//x,y合并,树-1
}
if (Flag&&t==) printf("Yes\n");
else printf("No\n");
}
}
return ;
}

最新文章

  1. Android带加减的edittext
  2. window.hostory(浏览器的历史记录)
  3. Android sqlite数据库自定义存放路径办法参考(未验证)
  4. css居中完全指南(翻译)
  5. SharePoint 2013 本地开发解决方案以及远程调试
  6. September 22nd 2016 Week 39th Thursday
  7. linux基本命令(2)-备份压缩命令
  8. java的动态代理机制
  9. PHP输出
  10. iOS 并行编程:Thread
  11. javascript 正则匹配手机号码
  12. paip.输入法编程---增加码表类型
  13. PHP的日志记录-错误与异常记录
  14. Python自学知识点----Day01
  15. Javascript 继承和多态
  16. django 富文本编辑器
  17. 【Apache运维基础(6)】Apache的日志管理与分析
  18. 有时候做JQ动画,鼠标经过,它会不停自己抖动不停,解决方法(此处,是兼容IE ,当鼠标经过,遮罩层从下移到上边的JQ动画效果)
  19. 通过反射实现IOC功能
  20. HDU2966 In case of failure(浅谈k-d tree)

热门文章

  1. ETH功能类
  2. linux下定位文件
  3. CSS3的transform 转换
  4. mac 终端 常用命令,MacOS 常用终端命令大全,mac 在当前目录打开终端
  5. 【cml】wosi-demo
  6. 高可用服务 AHAS 在消息队列 MQ 削峰填谷场景下的应用
  7. Django项目:CRM(客户关系管理系统)--13--05PerfectCRM实现King_admin注册功能获取内存02
  8. NLTK的探索
  9. Thinkphp 不足之处
  10. python 中if __name__==&quot;__main__&quot;