怎么又是一道叫迷宫的题呀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 迷宫的更多相关文章

  1. 洛谷 P1605 迷宫

    题目链接 https://www.luogu.org/problemnew/show/P1605 题目背景 迷宫 题目描述 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和 ...

  2. 洛谷P1605 迷宫——S.B.S.

    题目背景 迷宫 [问题描述] 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和 终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案.在迷宫 中移动有上下 ...

  3. 洛谷P1605 迷宫 (DFS)

    题目背景 迷宫 [问题描述] 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和 终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案.在迷宫 中移动有上下 ...

  4. 洛谷P1605 迷宫【dfs】

    题目背景 迷宫 [问题描述] 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和 终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案.在迷宫 中移动有上下 ...

  5. 洛谷P1605 迷宫

    迷宫 题目链接 这道题就是一道简单的dfs计方案数qwq. 我的思路是把表初始化为1,再将障碍改为0,因为在全局定义中数组会直接初始化为0,所以就少去了对边界的特判. next数组加循环可以减少代码量 ...

  6. 洛谷—— P1605 迷宫

    P1605 迷宫 题目背景 迷宫 [问题描述] 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和 终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案.在 ...

  7. 洛谷P1605 迷宫 深度搜索 模板!

    题目背景 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案.在迷宫中移动有上下左右四种方式,每次只能移 ...

  8. (Java实现) 洛谷 P1605 迷宫

    题目背景 迷宫 [问题描述] 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和 终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案.在迷宫 中移动有上下 ...

  9. 洛谷P1309——迷宫(傻瓜DFS)

    题目背景 迷宫 [问题描述] 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和 终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案.在迷宫 中移动有上下 ...

随机推荐

  1. 读REDIS数据结构

    一.DICT 主要有两个问题: 1.散列冲突,解决办法是拉链法 typedef struct dictEntry { void *key; union { void *val; uint64_t u6 ...

  2. axis调用cxf的webservice注意事项

    需要注意的是: 1.wsdl显示部分内容 <?xml version="1.0" ?> - <wsdl:definitions name="Archiv ...

  3. 指令过滤器orderBy

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...

  4. js动画之requestAnimationFrame

    1.setTimeout和setInterval 在讲setTimeout和setInterval之前,先讲一下异步执行的运行机制.(同步执行也是如此,因为它可以被视为没有异步任务的异步执行.) (1 ...

  5. vue源码解读1

    前言 vue是一个非常典型的MVVM框架,它的核心功能一是双向数据绑定系统,二是组件化开发系统.那么本文是以一种通俗易懂的的角度来实现一个简单 的双向数据绑定系统,如果你用过vue却对vue的实现原理 ...

  6. TIDB2 —— 三篇文章了解 TiDB 技术内幕 - 说存储

    原文地址:https://pingcap.com/blog-cn/tidb-internal-1/ 引言 数据库.操作系统和编译器并称为三大系统,可以说是整个计算机软件的基石.其中数据库更靠近应用层, ...

  7. Oracle客户端与Toad、plsql developer安装

    (一)oracle client与oracle instant client比较 当我们要使用Toad.plsql developer等工具连接数据库时,首先需要在自己的电脑上安装oracle cli ...

  8. Spring-Day03-注解注入&AOP入门-作业

    IOC(DI) —— 注解 注解入门: 在applicationContext.xml中引入context约束 打开spring-framework-4.2.4.RELEASE\docs\spring ...

  9. Python基础—01-认识python,编写第一个程序

    认识python 发展历史:点此查看简介 就业方向: WEB.爬虫.运维.数据分析.机器学习.人工智能.... 版本选择 python2.7是最后一个py2的版本,2020年将不再提供支持 pytho ...

  10. 转载:Python中的if __name__ == '__main__'

    刚开始学习Python时,对于有些书出现的函数带有“if __name__ == '__main__'”总是迷惑不解,比如<dive into Python>中开头的哪个根据输入的数字计算 ...