洛谷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次,有多少种从起点坐标到终点坐标的方案.在迷宫 中移动有上下 ...
随机推荐
- HDU 2647 拓扑排序
题意:每个人的工资至少888,然后有m个条件,前者比后者要多.求最少工资. 分析: 最开始的开邻接矩阵的肯定超时,如果dfs,会出现由于刚开始不是从入度为0的点出发,后期修改不了.比较麻烦. 正确方式 ...
- bzoj 2434 [Noi2011]阿狸的打字机——AC自动机
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2434 dfs AC自动机,走过的点权值+1,回溯的时候权值-1:走到询问的 y 串的节点,看 ...
- 远程桌面连接(连接服务器)报错Oracle修正
解决方案: 开始——运行——gpedit.msc——计算机配置——管理模版——系统——凭据分配——加密oracle修正——易受攻击 ok
- eclipse 安装/卸载插件
1.通过Help>>Install New Soft 之后弹出对话框,可以通过“Add”按钮添加已经有的插件的(zip等)或者输入安装地址,之后按照要求即可.2.对于安装失败的插件,再次进 ...
- ubuntu16.04
原来安装的14.04快捷键冲突,又改不过来,还有就是每次从新启动,桌面就恢复原来的状态了.然后突然有一天桌面没了,我一气之下,从新安装.装好16.04还是没有桌面,我也是醉了,还好解决了.应该是我的集 ...
- Oracle 手工创建awr快照,获取报告
Oracle 的自动化工具都是通过后台的进程调用相关的函数实现,而Oracle也允许用户通过包来手工调用这些函数,显然这样增加了工具的安全性,也提高了可操作性,使得DBA可以更灵活的使用这些函数来满足 ...
- oracle-sql脚本导出EXCEL数据
在数据库中,经常有业务人员提出需求导出数据库中的业务数据,而且是每天.每周或每月定时导出.为了方便,可将sql查询的脚本 通过下面脚本来导出EXCEL数据. 1.将查询sql脚本(AAA.sql)放到 ...
- 给xcode项目重命名
在xcode项目开发中,经常会遇到需要修改项目名字的问题, 但是xcode本身修改项目名字比较麻烦,有时候修改的不完全,有时候修改了项目无法打开,无奈只能建一个新项目.这里提供一种修改xcode项目名 ...
- c#一种存储结构解决动态平衡问题
不说其他了,最近为了实现这么一个场景了而提取的一种结构.我们把一种数据缓存,比如开辟的存储Buffer,或者连接池.放置在一个结构中.很多时候这有一个共同的特点,我们的业务在一段时间会急剧增长,我们开 ...
- leetcode笔记(五)809. Expressive Words
题目描述 Sometimes people repeat letters to represent extra feeling, such as "hello" -> &qu ...