洛谷P2307 迷宫
怎么又是一道叫迷宫的题呀QWQ
题目链接
这道题主要是对并查集的考察,需要注意的坑点在于有可能存在的不止一个联通块。
我们只需要对输入的两个数据进行判断,如果在一个集合中证明有多条路则输出0,如果不在一个集合中就合并到同一个集合中。
这道题的输入或许大概可能也会是坑?!qwq
AC代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define MAXN 100100
using namespace std;
bool sign;
bool book;
int f[MAXN+10];
int done[MAXN+10];
int find(int u)
{
if(f[u]==u) return u;
else return f[u]=find(f[u]);
}
int main()
{
while(1)
{
book=0;
memset(done,0,sizeof(done));
for(int i=1;i<=MAXN;i++)
{
f[i]=i;
}
while(1)
{
int x,y;
scanf("%d%d",&x,&y);
// printf("x=%d y=%d\n",x,y);
if(x==0)
{
break;
}
if(x==-1)
{
book=1;
sign=1;
break;
}
done[x]=1;
done[y]=1;
int a=find(x);
// printf("a=%d\n",a);
int b=find(y);
// printf("b=%d\n",b);
if(a==b&&!book)
{
book=1;
// printf("book=%d",book);
printf("0\n");
}
else
{
f[a]=b;
}
}
if(sign) break;
int total=0;
for(int i=1;i<=MAXN;i++)
{
if(f[i]==i&&done[i])
{
total++;
}
}
if(!book&&total==1) printf("1\n");
if(!book&&total!=1) printf("0\n");
}
return 0;
}
一开始yy了一个假算法骗了40分
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
#include<vector>
#define INF 0x3f3f3f3f
#define MAXN 200000
using namespace std;
vector<int> G[MAXN];
int num[MAXN];
bool sign;
int cur[MAXN];
bool vis;
queue<int> q;
int main()
{
while(1)
{
int mx=0;
memset(num,0,sizeof(num));
memset(G,0,sizeof(G));
memset(cur,0,sizeof(cur));
while(1)
{
int x,y;
scanf("%d%d",&x,&y);
if(x==0) break;
if(x==-1)
{
sign=1;
break;
}
mx=max(mx,x);
mx=max(mx,y);
num[x]++;
num[y]++;
G[x].push_back(y);
G[y].push_back(x);
}
if(sign) break;
for(int i=1;i<=mx;i++)
{
vis=0;
if(num[i]!=0)
{
q.push(i);
while(!q.empty())
{
int r=q.front();
q.pop();
for(int j=0;j<G[r].size();j++)
{
int p=G[r][j];
if(p==0) continue;
// for(int k=0;k<G[p].size();k++)
// {
// if(G[p][k]==r) G[p][k]=0;
// }
G[r][j]=0;
int ans=0;
for(int k=0;k<G[p].size();k++)
{
if(G[p][k]!=0) ans++;
}
if(ans!=0)
{
cur[p]++;
//printf("cur[%d]=%d",p,cur[p]);
if(cur[p]>1)
{
printf("0\n");
vis=1;
break;
}
q.push(p);
}
}
if(vis) break;
}
if(vis) break;
}
}
if(!vis) printf("1\n");
}
return 0;
}
洛谷P2307 迷宫的更多相关文章
- 洛谷 P1605 迷宫
题目链接 https://www.luogu.org/problemnew/show/P1605 题目背景 迷宫 题目描述 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和 ...
- 洛谷P1605 迷宫——S.B.S.
题目背景 迷宫 [问题描述] 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和 终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案.在迷宫 中移动有上下 ...
- 洛谷P1605 迷宫 (DFS)
题目背景 迷宫 [问题描述] 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和 终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案.在迷宫 中移动有上下 ...
- 洛谷P1605 迷宫【dfs】
题目背景 迷宫 [问题描述] 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和 终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案.在迷宫 中移动有上下 ...
- 洛谷P1605 迷宫
迷宫 题目链接 这道题就是一道简单的dfs计方案数qwq. 我的思路是把表初始化为1,再将障碍改为0,因为在全局定义中数组会直接初始化为0,所以就少去了对边界的特判. next数组加循环可以减少代码量 ...
- 洛谷—— P1605 迷宫
P1605 迷宫 题目背景 迷宫 [问题描述] 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和 终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案.在 ...
- 洛谷P1605 迷宫 深度搜索 模板!
题目背景 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案.在迷宫中移动有上下左右四种方式,每次只能移 ...
- (Java实现) 洛谷 P1605 迷宫
题目背景 迷宫 [问题描述] 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和 终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案.在迷宫 中移动有上下 ...
- 洛谷P1309——迷宫(傻瓜DFS)
题目背景 迷宫 [问题描述] 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和 终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案.在迷宫 中移动有上下 ...
随机推荐
- Android面试问题收集总结
转载请标明出处: http://www.cnblogs.com/why168888/p/6405204.html 本文出自:[Edwin博客园] Android基础 View的绘制流程:自定义View ...
- (String)、toString()与String.valueOf()的区别
(String).Object.toString()正常情况下跟String.valueOf()没有区别. 但当Object是null的时候.toString会抛出异常.valueOf返回" ...
- [USACO17JAN]Subsequence Reversal
嘟嘟嘟 这题刚开始是什么思路也没有,关键是不知道怎么解决序列反转的问题. 然后我就想到如果暴力反转一个序列的话,实际上就是不断交换数组中的两个数ai和aj,同时要满足交换的数不能交叉. 然后又看了一眼 ...
- 【洛谷P1538】迎春舞会之数字舞蹈
迎春舞会之数字舞蹈 题目链接 一道奇怪的模拟题, 先将样例输出复制下来,观察观察 -- -- -- -- -- -- -- -- ① | | | | | | | | | | | | | | ② | | ...
- 【luogu P3275 [SCOI2011]糖果】 题解
题目链接:https://www.luogu.org/problemnew/show/P3275 把不等式 A > B 转化成 A - B >= 1或者 B - A <= -1再差分 ...
- 时空隧道FQ
给你推荐一款海外网站加速工具,为科技工作者.海外归国人员.企业团队.外贸工作者提供海外上网服务,永久免费. 国外网址:https://chrome.google.com/webstore/detail ...
- mysql-delete 和 truncate的区别
delete from student where id = 3; -- delete partly delete from student; -- delete all truncate stu ...
- SpringBoot非官方教程 | 第十一篇:springboot集成swagger2,构建优雅的Restful API
转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springboot/2017/07/11/springboot-swagger2/ 本文出自方志朋的博客 swa ...
- Python 学习笔记(八)Python列表(一)
列表基本操作 列表(list)定义 列表是Python中的一种对象类型,也是一种序列 对象类型:list 表示方法:[ ] python 列表中的元素可以是任何类型的对象 >>> ...
- Angularjs基础(十一)
ng-csp 描述:修改内容的安全策略 实例: 修改AngularJS 中关于"eval"的行为方式及内联样式: <body ng-app="" ng-c ...