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:

  1. Always shut open doors behind you immediately after passing through
  2. Never open a closed door
  3. End up in your chambers (room 0) with all doors closed

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:

  1. Start line - A single line, "START M N", where M indicates the butler's starting room, and N indicates the number of rooms in the house (1 <= N <= 20).
  2. Room list - A series of N lines. Each line lists, for a single room, every open door that leads to a room of higher number. For example, if room 3 had open doors to rooms 1, 5, and 7, the line for room 3 would read "5 7". The first line in the list represents room 0. The second line represents room 1, and so on until the last line, which represents room (N - 1). It is possible for lines to be empty (in particular, the last line will always be empty since it is the highest numbered room). On each line, the adjacent rooms are always listed in ascending order. It is possible for rooms to be connected by multiple doors!
  3. End line - A single line, "END"

Following the final data set will be a single line, "ENDOFINPUT".

Note that there will be no more than 100 doors in any single data set.

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
1 END
START 0 5
1 2 2 3 3 4 4 END
START 0 10
1 9
2
3
4
5
6
7
8
9 END
ENDOFINPUT

Sample Output

YES 1
NO
YES 10
题目大意不在敖述,此题是一道典型的求无向图中有无欧拉回路或欧拉通路的问题。首先是建图:以房间为顶点,房间之间的门为边建立无向图。然后就是输入问题,要求大家对字符串的有较好的处理能力,我用的是getchar()。然后请看代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>
#include<cstdlib>
#include<queue>
using namespace std ;
const int MAXN = 105 ;
const int INF = 0x7fffffff ;
int d[MAXN] ; // 建立顶点的度的数组
int main()
{
string s ;
int m , n ;
int sumt , sumj , sumd ;
while (cin >> s)
{
if(s == "START")
{
scanf("%d%d" , &m , &n) ;
getchar() ; // 处理刚才的回车,此处千万不要忘记 !!
memset(d , 0 , sizeof(d)) ;
int i ;
sumd = 0 ; // 统计边的数目,即门的数目
int pan = 0 ; // 注意这个判断变量的应用,请大家自己体会 !!
for(i = 0 ; i < n ; i ++)
{
sumt = 0 ;
char t ;
while (1)
{
t = getchar() ;
if(t == '\n')
{
if(pan)
{
d[i] ++ ;
d[sumt] ++ ;
sumd ++ ;
pan = 0 ;
}
break ;
}
if(t == ' ')
{
d[i] ++ ;
d[sumt] ++ ;
sumd ++ ;
sumt = 0 ;
}
else
{
sumt = sumt * 10 + t - '0' ;
pan = 1 ;
}
}
}
}
if(s == "END")
{
int j ;
sumj = 0 ; // 统计奇度顶点的个数
for(j = 0 ; j < n ; j ++)
{
if(d[j] % 2 == 1)
{
sumj ++ ;
}
}
if(sumj > 2 || sumj == 1)
{
printf("NO\n") ;
}
else if(sumj == 0 && m != 0)
{
printf("NO\n") ;
}
else if(sumj == 2 && (d[m] % 2 != 1 || d[0] % 2 != 1))
{
printf("NO\n") ;
}
else if(sumj == 2 && d[m] % 2 == 1 && d[0] % 2 == 1 && m == 0)
{
printf("NO\n") ;
}
else
{
printf("YES %d\n" ,sumd) ;
}
}
if(s == "ENDOFINPUT")
{
break ;
}
}
return 0 ;
}
												

POJ 1300 Door Man - from lanshui_Yang的更多相关文章

  1. POJ 1300 Door Man(欧拉回路的判定)

    题目链接 题意 : 庄园有很多房间,编号从0到n-1,能否找到一条路径经过所有开着的门,并且使得通过门之后就把门关上,关上的再也不打开,最后能回到编号为0的房间. 思路 : 这就是一个赤裸裸的判断欧拉 ...

  2. poj 1300 Door Man 欧拉回路

    题目链接:http://poj.org/problem?id=1300 You are a butler in a large mansion. This mansion has so many ro ...

  3. POJ 1300.Door Man 欧拉通路

    Door Man Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 2596   Accepted: 1046 Descript ...

  4. poj 1300 欧拉图

    http://poj.org/problem?id=1300 要不是书上有翻译我估计要卡死,,,首先这是一个连通图,鬼知道是那句话表示出来的,终点必须是0,统计一下每个点的度数,如果是欧拉回路那么起点 ...

  5. [欧拉回路] poj 1300 Door Man

    题目链接: http://poj.org/problem?id=1300 Door Man Time Limit: 1000MS   Memory Limit: 10000K Total Submis ...

  6. POJ 2513 Colored Sticks - from lanshui_Yang

    题目大意:给定一捆木棒,每根木棒的每个端点涂有某种颜色.问:是否能将这些棒子首位项链,排成一条直线,且相邻两根棍子的连接处的颜色一样. 解题思路:此题是一道典型的判断欧拉回路或欧拉通路的问题,以木棍的 ...

  7. POJ 1300 欧拉通路&欧拉回路

    系统的学习一遍图论!从这篇博客开始! 先介绍一些概念. 无向图: G为连通的无向图,称经过G的每条边一次并且仅一次的路径为欧拉通路. 如果欧拉通路是回路(起点和终点相同),则称此回路为欧拉回路. 具有 ...

  8. POJ 3177 Redundant Paths - from lanshui_Yang

    Description In order to get from one of the F (1 <= F <= 5,000) grazing fields (which are numb ...

  9. POJ 1300 最基础的欧拉回路问题

    题目大意: 从0~n-1编号的房间,从一个起点开始最后到达0号房间,每经过一扇门就关上,问最后能否通过所有门且到达0号房间 我觉得这道题的输入输出格式是我第一次遇到,所以在sscanf上也看了很久 每 ...

随机推荐

  1. 【HTTP】Fiddler(三)- Fiddler命令行和HTTP断点调试

    一. Fiddler内置命令. 上一节(使用Fiddler进行抓包分析)中,介绍到,在web session(与我们通常所说的session不是同一个概念,这里的每条HTTP请求都成为一个sessio ...

  2. hdu1937 Finding Seats

    hdu1937 Finding Seats 题意是 求最小的矩形覆盖面积内包含 k 个 空位置 枚举上下边界然后 双端队列 求 最小面积 #include <iostream> #incl ...

  3. oracle数据库中insert与select

    前几天遇到了一个问题,insert语句中,不仅要insert页面传过来的值,还要insert select的值. 语句应该这样写: insert into 表1(字段a,字段b,...) select ...

  4. hdu1370-Biorhythms

    http://acm.hdu.edu.cn/showproblem.php?pid=1370 中国剩余定理 已知(n+d)%23=a;   (n+d)%28=b;   (n+c)%33=i       ...

  5. ORACLE DATABASE 10G FALSHBACK 知识整理

    1.知识储备 1)    当出现介质损坏时(如数据文件丢失),任何闪回方法都毫无用处,只能执行标准的备份.还原与恢复. 2.SCN记录方法 SQL>variable x_scn number; ...

  6. 定义自己的仪表板DashBoard - -kankanstyle

    既然做了奶站软件,需要使用的仪表板,显示质量数据 public class MDashboard extends ImageView { private Bitmap mPointerBitmap; ...

  7. 我是如何同时拿到阿里和腾讯offer的

    前言 三月真是一个忙碌的季节,刚刚开学就需要准备各种面试和笔试(鄙视).幸运的是,在长达一个月的面试内推季之后,终于同时拿到了阿里和腾讯的offer,还是挺开心的.突而想起久未更新的博客,就冒昧学一学 ...

  8. jsp:setProperty

    类声明: package test; public class Student {     private int age; public int getAge() {         return ...

  9. CodeForces 371C Hamburgers

    B题又耽误时间了...人太挫了.... C. Hamburgers time limit per test 1 second memory limit per test 256 megabytes i ...

  10. 无边无状态栏窗口(使用GetWindowLongPtr设置GWL_EXSTYLE)

    通过SetWindowLongPtr来设置窗口样式 var NewStyle: Integer; begin Application.Initialize; Application.MainFormO ...