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的数字表示颜色)组成,相邻的两个珠子在接触的地方颜色相同,现在有一些零碎的珠子,确认它是否能 复原成完整的项链. 把 ...
随机推荐
- 591 - Box of Bricks
Box of Bricks Little Bob likes playing with his box of bricks. He puts the bricks one upon another ...
- Oauth认证的时候报错:timestamp_refused
今天server大规模报错,大部分用户无法登陆,小部分能够登陆,非常是奇怪. 查看log.调试代码,发现问题是在oauth认证的时候出了问题,报 timestamp_refused. google了下 ...
- 简单的 "双缓冲" 绘图的例子(研究一下)
所谓双缓冲就是先画到内存画布(如: TBitmap), 然后再转帖到目的地. 譬如下面小程序: procedure TForm1.FormCreate(Sender: TObject); begin ...
- Java 5种字符串拼接方式性能比较。
最近写一个东东,可能会考虑到字符串拼接,想了几种方法,但对性能未知,于是用Junit写了个单元测试. 代码如下: import java.util.ArrayList; import java.uti ...
- IOS开发之----四舍五入问题
方法一: -(NSString *)notRounding:(float)price afterPoint:(int)position{ NSDecimalNumberHandler* roundin ...
- 7.数据本地化CCString,CCArray,CCDictionary,tinyxml2,写入UserDefault.xml文件,操作xml,解析xml
数据本地化 A CCUserDefault 系统会在默认路径cocos2d-x-2.2.3\projects\Hello\proj.win32\Debug.win32下生成一个名为UserDef ...
- hdu 1086(判断线段相交)
传送门:You can Solve a Geometry Problem too 题意:给n条线段,判断相交的点数. 分析:判断线段相交模板题,快速排斥实验原理就是每条线段代表的向量和该线段的一个端点 ...
- 使用Swing实现简易而不简单的文档编辑器
本文通过Swing来实现文档简易而不简单的文档编辑器,该文档编辑器的功能包括: 设置字体样式:粗体,斜体,下划线,可扩展 设置字体:宋体,黑体,可扩展 设置字号:12,14,18,20,30,40, ...
- js使用栈来实现10进制转8进制 js取除数 余数
function ten2eight(x){ var s=[]; var r=''; while(x>0){ s.push(x%8); x=parseInt(x/8); } while(s.le ...
- LaTeX中表格多行显示的最简单设置方法
这事实上是一个非常easy的问题,可是这两天发现我之前的解决方式太麻烦了.简介一下这样的最简单的方法: 之前设置多行显示的时候,用类似于以下这样的方法进行多行显示: \begin{table} \ne ...


