POJ1300(欧拉回路)
|
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]
[Discuss]
题目描写叙述:
你是一座大庄园的管家。
庄园有非常多房间,编号为 0、1、2、3,...。
你的主人是一个心不在焉的人,常常沿着走廊任意地把房间的门打开。
多年来,你掌握了一个诀窍:沿着一个通道,穿过这些大房间,并把房门关上。你的问题是是否能找到一条路径经过全部开着门的房间,并使得:
这题字符处理挺麻烦的。
。
。。
1) 通过门后马上把门关上;
2) 关上了的门不再打开;
3) 最后回到你自己的房间(房间 0),而且全部的门都已经关闭了。
以房间为顶点、连接房间之间的门为边构造图。依据题目的意思,输入文件里每一个測试数据所构造的图都是连通的。本题实际上是推断一个图中是否存在欧拉回路或欧拉通路,要分两种情况考虑:
1:
假设全部的房间都有偶数个门(通往其它房间),那么有欧拉回路,能够从 0 号房间出发,回到 0 号房间。可是这样的情况下,出发的房间必须为 0,由于要求回到 0 号房间。
2:
有两个房间的门数为奇数,其余的都是偶数,假设出发的房间和 0 号房间的门数都是奇数,那么也能够从出发的房间到达 0 号房间,而且满足题目要求。可是不能从房间 0 出发,必须从还有一个门数为奇数的房间出发。
#include <cstdio>
#include <cstring>
int readLine( char* s )
{
int L;
for( L=0; ( s[L]=getchar() ) != '\n' && s[L] != EOF; L++ );
s[L] = 0;
return L;
}
int main( )
{
int i, j;
char buf[128];
int M, N;
int door[20];
while( readLine(buf) )
{
if( buf[0]=='S' )
{
sscanf( buf, "%*s %d %d", &M, &N );
for( i=0; i < N; i++ )
door[i] = 0;
int doors = 0;
for( i=0; i<N; i++ )
{
readLine(buf);
int k = 0; while( sscanf(buf + k, "%d", &j) == 1 )
{
doors++;
door[i]++;
door[j]++;
while( buf[k] && buf[k] == ' ' ) k++;
while( buf[k] && buf[k] != ' ' ) k++;
}
}
readLine( buf ); int odd = 0, even = 0;
for( i=0; i<N; i++ )
{
if( door[i]%2==0 ) even++;
else odd++;
}
if( odd==0 && M==0 ) printf( "YES %d\n", doors );
else if( odd==2 && door[M]%2==1 && door[0]%2==1 && M!=0 )
printf( "YES %d\n", doors );
else printf( "NO\n" );
}
else if( !strcmp(buf, "ENDOFINPUT") )
break;
}
return 0;
}
POJ1300(欧拉回路)的更多相关文章
- POJ1300 Door Man —— 欧拉回路(无向图)
题目链接:http://poj.org/problem?id=1300 Door Man Time Limit: 1000MS Memory Limit: 10000K Total Submiss ...
- ACM/ICPC 之 混合图的欧拉回路判定-网络流(POJ1637)
//网络流判定混合图欧拉回路 //通过网络流使得各点的出入度相同则possible,否则impossible //残留网络的权值为可改变方向的次数,即n个双向边则有n次 //Time:157Ms Me ...
- [poj2337]求字典序最小欧拉回路
注意:找出一条欧拉回路,与判定这个图能不能一笔联通...是不同的概念 c++奇怪的编译规则...生不如死啊... string怎么用啊...cincout来救? 可以直接.length()我也是长见识 ...
- ACM: FZU 2112 Tickets - 欧拉回路 - 并查集
FZU 2112 Tickets Time Limit:3000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u P ...
- UVA 10054 the necklace 欧拉回路
有n个珠子,每颗珠子有左右两边两种颜色,颜色有1~50种,问你能不能把这些珠子按照相接的地方颜色相同串成一个环. 可以认为有50个点,用n条边它们相连,问你能不能找出包含所有边的欧拉回路 首先判断是否 ...
- POJ 1637 混合图的欧拉回路判定
题意:一张混合图,判断是否存在欧拉回路. 分析参考: 混合图(既有有向边又有无向边的图)中欧拉环.欧拉路径的判定需要借助网络流! (1)欧拉环的判定:一开始当然是判断原图的基图是否连通,若不连通则一定 ...
- codeforces 723E (欧拉回路)
Problem One-Way Reform 题目大意 给一张n个点,m条边的无向图,要求给每条边定一个方向,使得最多的点入度等于出度,要求输出方案. 解题分析 最多点的数量就是入度为偶数的点. 将入 ...
- UVa 12118 检查员的难题(dfs+欧拉回路)
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- UVA 10054 (欧拉回路) The Necklace
题目:这里 题意:有一种由彩色珠子连接而成的项链,每个珠子两半由不同颜色(由1到50的数字表示颜色)组成,相邻的两个珠子在接触的地方颜色相同,现在有一些零碎的珠子,确认它是否能 复原成完整的项链. 把 ...
随机推荐
- win7下让程序默认以管理员身份运行
在win7中用自己写的程序读取MBR时,突然提示无法对磁盘进行操作,而在xp下并没有这个问题:最后点右键以管理员身份运行才可以正常运行.于是想办法让程序在双击启动时默认以管理员身份运行.具体方法: 1 ...
- WebGL自学教程——WebGL演示样本:开始
最终开始WebGL样品演示,...... 开始 使用WebGL步骤,非常easy: 1. 获得WebGL的渲染环境(也叫渲染上下文). 2. 发挥你的想象力,利用<WebGL參考手冊>中的 ...
- json转String 和 String转json 和判断对象类型
function ajaxGetMenuList(){ $.getJSON("login.do", function(json){ var r = ""; zN ...
- BestCoder Round #3HDU 4907
1. HDU 4907:http://acm.hdu.edu.cn/showproblem.php?pid=4907 中文题我就不说题意了,直接说解题思路吧! ① 第一种思路就是我比赛时的思路,将a数 ...
- How a C++ compiler implements exception handling
Introduction One of the revolutionary features of C++ over traditional languages is its support for ...
- Delphi数据类型转换(有几个字符串函数没见过,比如StringToWideChar和WideCharToString)
DateTimeToFileDate 函数 将DELPHI的日期格式转换为DOS的日期格式 DateTimeT ...
- Linux与JVM的内存关系分析(转)
引言 在一些物理内存为8g的服务器上,主要运行一个Java服务,系统内存分配如下:Java服务的JVM堆大小设置为6g,一个监控进程占用大约600m,Linux自身使用大约800m.从表面上,物理内存 ...
- java中clone的深入理解
Java中Clone的概念大家应该都很熟悉了,它可以让我们很方便的“制造”出一个对象的副本来,下面来具体看看java中的Clone机制是如何工作的? 1. Clone和Copy 假 ...
- win8 远程桌面 你得凭证不工作
今天在在登录azure远程桌面时,一直提示你的凭证不工作, 按照网上各种教程都不行, 后来发现在win8中用户名结构中,需要加上本机电脑名比如:“win8\administrator”.
- WebService开启远程测试
WebService部署成站点之后,如果在本地测试webservice的接口可以运行,在远程却显示“测试窗体只能用于来自本地计算机的请求”或者"The test form is only a ...


