[欧拉回路] poj 1300 Door Man
题目链接:
http://poj.org/problem?id=1300
|
Door Man
Description
You are a butler in a large mansion. This mansion has so many rooms that they are merely referred to by number (room 0, 1, 2, 3, etc...). Your master is a particularly absent-minded lout and continually leaves doors open throughout a particular floor of the
house. Over the years, you have mastered the art of traveling in a single path through the sloppy rooms and closing the doors behind you. Your biggest problem is determining whether it is possible to find a path through the sloppy rooms where you:
In this problem, you are given a list of rooms and open doors between them (along with a starting room). It is not needed to determine a route, only if one is possible. Input
Input to this problem will consist of a (non-empty) series of up to 100 data sets. Each data set will be formatted according to the following description, and there will be no blank lines separating data sets.
A single data set has 3 components:
Following the final data set will be a single line, "ENDOFINPUT". Output
For each data set, there will be exactly one line of output. If it is possible for the butler (by following the rules in the introduction) to walk into his chambers and close the final open door behind him, print a line "YES X", where X is the number of doors
he closed. Otherwise, print "NO". Sample Input START 1 2 Sample Output YES 1 Source |
[Submit] [Go Back] [Status] problem_id=1300" style="text-decoration:none">Discuss
[
题目意思:
有n个房间,房间之间通过门连接,知道门连接的房间情况。求从m号房间是否能经过全部的门一次。而且回到0号门。
解题思路:
把房间看成节点,门看成边,由题意知是一个连通图,然后推断是否存在从m到0的欧拉通路。
统计各点的度数就可以。
代码:
//#include<CSpreadSheet.h> #include<iostream>
#include<cmath>
#include<cstdio>
#include<sstream>
#include<cstdlib>
#include<string>
#include<string.h>
#include<cstring>
#include<algorithm>
#include<vector>
#include<map>
#include<set>
#include<stack>
#include<list>
#include<queue>
#include<ctime>
#include<bitset>
#include<cmath>
#define eps 1e-6
#define INF 0x3f3f3f3f
#define PI acos(-1.0)
#define ll __int64
#define LL long long
#define lson l,m,(rt<<1)
#define rson m+1,r,(rt<<1)|1
#define M 1000000007
//#pragma comment(linker, "/STACK:1024000000,1024000000")
using namespace std; #define Maxn 22 int nu[Maxn],n,m;
char temp[Maxn]; int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
while(scanf("%s",temp))
{
if(temp[3]=='O')
break;
scanf("%d%d",&m,&n);
memset(nu,0,sizeof(nu));
getchar();
int ans=0; for(int i=0;i<n;i++)
{
int la=0;
char c;
while((c=getchar())!='\n')
{
if(c==' ')
{
ans++;
nu[i]++;
nu[la]++;
la=0;
while((c=getchar())==' ');
if(c=='\n')
break;
la=c-'0';
}
else
la=la*10+c-'0';
}
if(la)
{
nu[i]++;
nu[la]++;
ans++;
}
}
//printf("ans:%d :%d %d\n",ans,nu[0],nu[1]);
//system("pause"); int ocnt=0,a[3];
for(int i=0;i<n;i++)
if(nu[i]&1)
{
ocnt++;
if(ocnt>2)
break;
a[ocnt]=i;
} gets(temp);
if(ocnt>2||ocnt==1)
printf("NO\n");
else if(!ocnt)
{
if(!m)
printf("YES %d\n",ans);
else
printf("NO\n");
}
else
{
if(a[1]>a[2])
swap(a[1],a[2]);
if(!a[1]&&a[2]==m)
printf("YES %d\n",ans);
else
printf("NO\n");
} }
return 0;
}
[欧拉回路] poj 1300 Door Man的更多相关文章
- POJ 1300 Door Man(欧拉回路的判定)
题目链接 题意 : 庄园有很多房间,编号从0到n-1,能否找到一条路径经过所有开着的门,并且使得通过门之后就把门关上,关上的再也不打开,最后能回到编号为0的房间. 思路 : 这就是一个赤裸裸的判断欧拉 ...
- poj 1300 Door Man 欧拉回路
题目链接:http://poj.org/problem?id=1300 You are a butler in a large mansion. This mansion has so many ro ...
- POJ 1300 欧拉通路&欧拉回路
系统的学习一遍图论!从这篇博客开始! 先介绍一些概念. 无向图: G为连通的无向图,称经过G的每条边一次并且仅一次的路径为欧拉通路. 如果欧拉通路是回路(起点和终点相同),则称此回路为欧拉回路. 具有 ...
- POJ 1300 最基础的欧拉回路问题
题目大意: 从0~n-1编号的房间,从一个起点开始最后到达0号房间,每经过一扇门就关上,问最后能否通过所有门且到达0号房间 我觉得这道题的输入输出格式是我第一次遇到,所以在sscanf上也看了很久 每 ...
- poj 1300 欧拉图
http://poj.org/problem?id=1300 要不是书上有翻译我估计要卡死,,,首先这是一个连通图,鬼知道是那句话表示出来的,终点必须是0,统计一下每个点的度数,如果是欧拉回路那么起点 ...
- POJ 1300.Door Man 欧拉通路
Door Man Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 2596 Accepted: 1046 Descript ...
- POJ 1300 Door Man - from lanshui_Yang
Description You are a butler in a large mansion. This mansion has so many rooms that they are merely ...
- POJ 1300 Door Man(欧拉通路)
题目描写叙述: 你是一座大庄园的管家. 庄园有非常多房间,编号为 0.1.2.3..... 你的主人是一个心不在 焉的人,常常沿着走廊任意地把房间的门打开.多年来,你掌握了一个诀窍:沿着一个通道,穿 ...
- [欧拉回路] poj 1386 Play on Words
题目链接: http://poj.org/problem?id=1386 Play on Words Time Limit: 1000MS Memory Limit: 10000K Total S ...
随机推荐
- 学习 微信小程序 大神不要笑
- win8怎么打开或关闭快速启动(进入BIOS前的设置)
win8系统之后,系统添加了快速启动功能,这让Windows的启动速度快了不少.但是,任何事物有利有弊,相信不少人在进入BIOS或者重装系统时遇到了麻烦.接下来我们看看在win8及以上版本怎么打开或关 ...
- xcode 通配搜索
class \w*<\w*> extension \w*: \w* \{\} 搜索所有泛型类.
- Swift 中的值类型与引用类型
顶级修饰 次级修饰 赋值类型 存储类型 值类型 值类型 深拷贝 栈 值类型 引用类型 浅拷贝 堆 引用类型 值类型 浅拷贝 堆 引用类型 引用类型 浅拷贝 堆 复合引用类型会改变内部值类型的存储行 ...
- WPF学习- 新建项目后自定义Main()[Type 'App' already defines a member called 'Main' with the same parameter types]
问题点: 在App.xaml.cs中自己添加Main方法,编译会出现如下报错: 错误 CS0111 类型“App”已定义了一个名为“Main”的具有相同参数类型的成员 错误 Type 'App' a ...
- TCP的链接过程
** TCP 三次握手 四次挥手** 客户端 服务器端 交互的模式 ---> 应答模式* 应答模式 ---> 客户端发起请求 服务器端回应请求** 客户端先去发起请求 ---> 查看 ...
- MFC定时器的使用
巧妙地使用定时器能达到意想不到的效果,写界面的时候能实现渐变,也能帮助多线程控制等我们知道,在VC的MFC中,已经为我们封装好了很多全面和强大的函数集,所以在MFC编程时,巧妙地调用MFC函数库可以为 ...
- linux arp-显示和修改IP到MAC转换表
博主推荐:更多网络测试相关命令关注 网络测试 收藏linux命令大全 arp命令用于操作主机的arp缓冲区,它可以显示arp缓冲区中的所有条目.删除指定的条目或者添加静态的ip地址与MAC地址对应关 ...
- 13Spring通过注解配置Bean(1)
配置Bean的形式:基于XML文件的方式:基于注解的方式(基于注解配置Bean:基于注解来装配Bean的属性) 下面介绍基于注解的方式来配置Bean. ——组件扫描(component scannin ...
- django 使用框架下auth.models自带的User进行扩展增加字段
需要改动三个地方: 1.models.py 创建模型User,并继承原模型类AbstraUser(在此处我增加了一个新的字段手机号) from django.db import models # ...