F - 小希的迷宫 (并查集)
Input
整个文件以两个-1结尾。
Output
Sample Input
6 8 5 3 5 2 6 4 5 6 0 08 1 7 3 6 2 8 9 7 5 7 4 7 8 7 6 0 03 8 6 8 6 4 5 3 5 6 5 2 0 0-1 -1
Sample Output
Yes Yes No 这题写了好久,数据的处理需要稍微注意下,特别是当输入只有0,0的时候这个时候是一个特别大的坑点,我在这里wa了好几发是yes
嗯大约三四个月前,这题是转载交上的,开心~~~~,现在是自己写上的~~~~~ 不过方案一是以前看别人博客的,觉得这种解法更简便,但是要想到
方案一:运用离散数学中的若是树 则点比边多一个
- #include<stdio.h>
- #include<string.h>
- int v[100010];
- int main()
- {
- int v1,v2;
- while(1){
- memset(v,0,sizeof(v));
- scanf("%d%d",&v1,&v2);
- if(v1==-1&&v2==-1) break;
- if(v1==0&&v2==0){
- printf("Yes\n");
- continue;
- }
- v[v1]=1;
- v[v2]=1;
- int max=v1>v2?v1:v2,min=v1<v2?v1:v2;
- int edge=1;
- while(~scanf("%d%d",&v1,&v2))
- {
- if(v1==0&&v2==0) break;
- if(max<v1) max=v1;
- if(max<v2) max=v2;
- if(min>v1) min=v1;
- if(min>v2) min=v2;
- v[v1]=1,v[v2]=1;
- edge++;
- }
- int V=0;
- for(int i=min;i<=max;i++)
- if(v[i]==1) V++;
- if(V-edge==1) printf("Yes\n");
- else printf("No\n");
- }
- return 0;
- }
方案二: 运用并查集
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<cmath>
#include<map>
using namespace std;
int pre[100005];
int digit[100005];
void init()
{for(int i=1;i<=100000;i++)pre[i]=i;
}
int find(int p)
{int root=p;while(pre[root]!=root)root=pre[root]; //表示的是最后的节点int temp;while(pre[p]!=p){temp=pre[p];pre[p]=root;p=temp;}return root;
}
void merge(int x,int y)
{int fx=find(x);int fy=find(y);if(fx!=fy)pre[fx]=fy;
}
int main()
{int x,y;while(scanf("%d%d",&x,&y)!=EOF){if(x==-1&&y==-1)break;if(x==0&&y==0){printf("Yes\n");continue;}init();int cnt=1,dot=0;//cnt 表示输入了多少边 dot表示有多少点merge(x,y);map<int,int>mp;if(mp[x]==0)mp[x]=++dot,digit[dot]=x;if(mp[y]==0)mp[y]=++dot,digit[dot]=y;while(scanf("%d%d",&x,&y),x,y){cnt++;merge(x,y);if(mp[x]==0)mp[x]=++dot,digit[dot]=x;if(mp[y]==0)mp[y]=++dot,digit[dot]=y;}if(cnt!=dot-1){printf("No\n");continue;}int ans=0;for(int i=1;i<=dot;i++){if(pre[digit[i]]==digit[i])ans++;}if(ans==1)printf("Yes\n");else printf("No\n");}return 0;
}
F - 小希的迷宫 (并查集)相关推荐
- 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 Submiss ...
- B - 小希的迷宫 (并查集判断是否存在环)
题目描述 上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走.但是她设计迷宫的思路不一样,首先她认为所有的通道都应该是双向连通的,就是说如果有一个 ...
- 集合数据hdu1272(小希迷宫 并查集)
查了好多资料,发现还是不全,干脆自己整理吧,最少保证在我的做法正确的,以免误导读者,也是给自己做个记录吧! Problem Description 前次Gardon的迷宫城堡小希玩了很久(见Probl ...
- hdu1272(小希迷宫 并查集)
Problem Description 上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走.但是她设计迷宫的思路不一样,首先她认为所有的通道都应该 ...
- 2019年湘潭大学程序设计竞赛(重现赛)F.Truthman or Fakeman(并查集)
链接:https://ac.nowcoder.com/acm/problem/25579 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536 ...
- 小希的迷宫-HDU-1272(并查集or树性质)
题目链接:小希的迷宫 并查集: 无回路 单连通 并查集做,首先想到的是判断两个点是否连通,不连通就合并,已连通的话说明会形成回路,则可以判定No,交了一发错了. 想了一下没有考虑到多个连通域的情况,该 ...
- codeforces1303 F. Number of Components(并查集+添_正序、删_逆序)
F. Number of Components 并查集,每次修改考虑的是这个修改带来的贡献,就是和相邻颜色的对比,如果不考虑先不考虑颜色覆盖,那么添加颜色首先会产生一个新的连通块,然后考虑合并,每合并 ...
- [NOI2002] 银河英雄传说(带权并查集好题)
题解: 用两个变量来维护: 1.sz[i]维护第i列元素的个数 2.pre[x]维护第x元素到当前队首的距离. 在并查集是不断维护这两个值. 至于如何维护看下图和文字解释 当然,这样维护还是不够的,对 ...
- 并查集(边带权,拓展域)
整理的算法模板合集: ACM模板 目录 朴素并查集 维护size的并查集 维护到祖宗节点距离的并查集 路径压缩和按秩合并 2.5 边带权 带权并查集求二分图最小环 2.6 扩展域 2.7 集合中单个元 ...
最新文章
- SQL创建linkserver
- python的列表的remove()方法、判断if xxx in xx条件比较耗时问题
- spyder 崩溃解决方案
- 白话Elasticsearch29-IK中文分词之IK分词器配置文件+自定义词库
- mysql性能监控指标及分析
- php5.5 mysql密码无法_MySQL密码正确却无法本地登录的解决方法
- python画饼图_百度飞桨PaddlePaddle之[Python小白逆袭大神]7天训练营
- 京东月薪8万招聘HR,岗位要求只有这3个字
- zTree结合Asp.net实现异步加载数据(写的可能有点简单....)
- 山西汾阳中学2021高考成绩查询,2021山西高考成绩查询时间
- 发几个vb整人小程序代码.第一次发帖.希望大家多多支持
- gazebo 模型导入
- GitBash和GitGui右键失效解决方法
- cordova media插件
- openAL在C++下的易用封装,调用直接播放3D音频,模拟3D音效
- python3之微信文章爬虫
- 相关EI/SCI期刊
- 2015年智能家居大事记 合纵连横成主旋律
- 目录遍历,PHP 遍历一个文件夹下所有文件和子文件夹的方法
- Git的原理详解与使用-臧雪园-专题视频课程