bhu1272小希的迷宫
题意不说了,是中文。
思路就是并查集,也不用说了。
难点1、判断条件:两个数不能有相同的根;还有就是有且只有一个根。
难点2、当直接输入0,0,时输出Yes。
WA过好多遍,之后重新整理思路,重写一遍就A了,如果细节上没处理好一直WA,不妨试试重写,这是忠告,适合每道题。
我的测试数据::
1 2 1 3 1 5 1 4 3 6 2 7 4 8 5 9 3 5 0 0
1 2 1 3 1 5 1 4 3 6 2 7 4 8 5 9 0 0
6 8 5 3 5 2 6 4 5 6 0 0
8 1 7 3 6 2 8 9 7 5 7 4 7 8 7 6 0 0
6 8 5 3 5 2 6 4 5 6 3 8 0 0
1 2 2 1 0 0
1 2 1 3 4 5 4 6 0 0
1 2 2 3 3 4 1 4 5 6 6 7 7 8 5 8 0 0
-1 -1
A的代码:::
#include<stdio.h>
#include<string.h>
#define max 100010
int father[max];
int mark[max],num[max];
int maxnum,minnum;
int n[max],m[max];
void init()
{
int k;
for(k=minnum;k<=maxnum;k++)
{
father[k]=k;num[k]=1;
}
}
int find(int son)
{
if(father[son]!=son)
{
father[son]=find(father[son]);
}
return father[son];
}
int main()
{
int i,j,fn,fm,cir;
while(scanf("%d%d",&n[0],&m[0])!=EOF)
{
maxnum=0;minnum=max;memset(mark,0,sizeof(mark));
if(n[0]==-1&&m[0]==-1) break;
else if(n[0]==0&&m[0]==0)
{
printf("Yes\n");
continue;
}
mark[n[0]]=1;mark[m[0]]=1;
i=1;
while(scanf("%d%d",&n[i],&m[i]))
{
if(n[i]==0&&m[i]==0) break;
mark[n[i]]=1;mark[m[i]]=1;
i++;
} //输入
for(j=0;j<i;j++)
{
if(maxnum<n[j]) maxnum=n[j];
if(minnum>n[j]) minnum=n[j];
if(maxnum<m[j]) maxnum=m[j];
if(minnum>m[j]) minnum=m[j];
}//最大和最小
init();cir=0;//初始化
for(j=0;j<i;j++)
{
fn=find(n[j]);
fm=find(m[j]);
if(fn==fm)
{
cir=1;break;
}
if(num[fn]==num[fm]) //A掉之后考虑过如果不用num计数会怎么样,结果是爆栈,只是我的方法适合这样吧。
{
if(fn>fm)
{
num[fn]+=num[fm];father[fm]=fn;
}
else
{
num[fm]+=num[fn];father[fn]=fm;
}
}
else
{
if(num[fn]>num[fm])
{
num[fn]+=num[fm];father[fm]=fn;
}
else
{
num[fm]+=num[fn];father[fn]=fm;
}
}
}//找祖宗合并
if(cir==1) //看是否成环,如果成环,cir==1
{
printf("No\n");
continue;
}
for(i=minnum;i<=maxnum;i++)//判断几棵树
{
if(i==father[i]&&mark[i]==1) {cir++;}//为了少定义变量,所以还用cir,因为如果没成环,cir还是等于0的,
}
if(cir==1) printf("Yes\n");//只有一棵树就对了
else printf("No\n");
}
return 0;
}
bhu1272小希的迷宫相关推荐
- 杭电 1272 poj 1308 小希的迷宫
这道题是我学了并查集过后做的第三个题,教我们的学姐说这是并查集的基础题,所以有必要牢牢掌握. 下面就我做这道题的经验,给大家一些建议吧!当然,我的建议不是最好的,还请各位大神指出我的错误来,我也好改正 ...
- 小希的迷宫(并查集)
小希的迷宫 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...
- HDU Problem 1272 小希的迷宫 【并查集】
小希的迷宫 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...
- 并查集杭电1272小希的迷宫
New~ 欢迎参加--计算机学院大学生程序设计竞赛(新生为主) 小希的迷宫 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/ ...
- hdu 1272 小希的迷宫 (并查集)
小希的迷宫 Time Limit: 2000/1000 ...
- HDOJ---1272 小希的迷宫[并查集]
小希的迷宫 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...
- HDU——1272小希的迷宫(并查集+拓扑排序)
小希的迷宫 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...
- HDU1272 小希的迷宫【并查集】
小希的迷宫 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...
- HDU1272(小希的迷宫) 并查集
小希的迷宫 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...
最新文章
- java中最常用jar包的用途说明,适合初学者
- [ python ] 类的组合
- 亚洲首获奖!清华大学团队获ACM SIGCOMM 2021唯一最佳学生论文奖
- Oracle E-Business Suite Maintenance Guide Release 12.2(Patching Utilities)
- MinGW下静态编译、链接Qt 5.0
- Linux apt-get install无法定位问题
- MVC + AJAX请求失败的问题
- Unity——用UnityEditor拷贝FBX中的AnimationClip
- 消息中间件系列(四):消息队列MQ的特点、选型、及应用场景详解
- LeetCode - 16. 3Sum Closest
- SCRUM 12.23
- kitti数据集介绍论文Vision meets Robotics: The KITTI Dataset
- python中的str()函数
- python多线程图片处理
- 逆透视变换与SIFT算法
- 创建一个员工信息管理界面,页面如下
- 计算机硬盘内存不足,电脑提示磁盘空间不足怎么办
- Excel将一列数据分隔成多列
- 银行家算法判断状态是否安全
- html网页游戏别踩白块,原生JS实现《别踩白块》游戏(兼容IE)