(╭ ̄3 ̄)╭ 小希的迷宫II

TimeLimit: 2000/1000 MS (Java/Others)  MenoryLimit: 65536/32768 K (Java/Others)
64-bit integer IO format:%I64d
 
Problem Description
上次Gardon的迷宫城堡小希玩了很久,现在她也想设计一个迷宫让Gardon来走。但是她设计迷宫的思路不一样,首先她认为所有的通道都应该是单向连通的,就是说如果有一个通道连通了房间A和B,那么它只能从房间A走到房间B,为了提高难度,小希希望任意两个房间有且仅有一条路径可以相通(除非走了回头路),并且必须要是树形结构,只能有一个根节点(没有任何一点指向它!!!)。小希现在把她的设计图给你,让你帮忙判断她的设计图是否符合她的设计思路。比如下面的例子,前两个是符合条件的,但是最后一个却不符合所要求的树形结构。

  

对于每一幅地图,都需要满足上述所要求的树形结构,这样的设计图才算合格。当只输入0 0,判断为树 

Input
输入包含多组数据,每组数据是一个以0 0结尾的整数对列表,表示了一条通道连接的两个房间的编号。房间的编号至少为1,且不超过100000。每两组数据之间有一个空行。 整个文件以两个负数结尾。 
Output
对于输入的每一组数据,输出仅包括一行。如果该迷宫符合小希的思路,那么输出"Case k is a tree.",否则输出"Case k is not a tree."。k表示的是第i组案例。(当作从第1组开始) 
 
SampleInput
6 8 5 3 5 2 6 4
5 6 0 0

8 1 7 3 6 2 8 9 7 5
7 4 7 8 7 6 0 0

3 8 6 8 6 4
5 3 5 6 5 2 0 0

-1 -1
SampleOutput
Case 1 is a tree.
Case 2 is a tree.
Case 3 is not a tree. 解法一:(只是在小希的迷宫上添加了入度条件即可)
     和小希的迷宫,基本一样,只是构成的图变成是有向图了的,还需要判断该有向图是否能够构成树

  输入a,b,表示点a指向点b,直到输入0 0开始判断,所输入所有点能否构成有向连通图无回路且是

1,根据图论的知识很容易可以知道,所有点(比如有N个点M条不重复的边)要构成有向连通图,只判断M=N-1即可。

2,用并查集的知识,判断是否存在回路,只需判断两个点的祖先是否一样即可。

3,需要多注意的一点是,还需要判断该有向连通图能够构成树,并不是所以得有向连通图都算是树。

  题目要求的树的结构是  :以箭头的方向为子节点,所以需要判断的是入度。

  比如输入a b,表示a指向b,既为a是b的父亲节点,b是a的孩子节点,只要统计b的入度状态即可。

     而且,树的定义有且仅有一个根节点树的根节点的入度为0,其余的节点入度均为1

  比如输入:1 2 3 2 0 0,表示的图是有向图,但他不具备题目所要求的树的结构

  所以,能够构成题目所要求的树还需要判断的条件是:

    所有点的入度和(InD_Num==N-1)或者(InD_Num==M)即可、

PS:输入负数表示结束。
 #include <iostream>
#include <stdio.h>
using namespace std;
#define Max 100100
int ID[Max];
int InD[Max];
int Out_Num;
int Pio[Max];
int SIGN;
int P_Num;
void Cread(int N)
{
for(int i=;i<=N;i++){ID[i]=i;Pio[i]=;InD[i]=;}
}
int Find(int x)
{
int TMD=x,TMP;
while(TMD!=ID[TMD])TMD=ID[TMD];
while(x!=TMD)
{
TMP=ID[x];
ID[x]=TMD;
x=TMP;
}
return x;
}
void Update(int a,int b)
{
if(Pio[a]){P_Num++;Pio[a]=;}
if(Pio[b]){P_Num++;Pio[b]=;}
if(InD[b]){Out_Num++;InD[b]=;}
int A=Find(a);
int B=Find(b);
if(A!=B)
{
ID[A]=B;
SIGN++;
}
else SIGN=Max;
}
int main()
{
int T,N,M,i,j,a,b,t=;
Cread(Max);SIGN=;P_Num=;Out_Num=;
while(scanf("%d%d",&a,&b)!=EOF)
{
if(a<&&b<)break;
if(a==&&b==)
{
// printf("%d %d %d\n",SIGN,Out_Num,P_Num);
if((SIGN==P_Num-||P_Num==)&&Out_Num==SIGN)
printf("Case %d is a tree.\n",t++);
else
printf("Case %d is not a tree.\n",t++);
Cread(Max);SIGN=;P_Num=;Out_Num=;
continue;
}
Update(a,b);
}
return ;
}
正解:(只需要根据树的定义,判断入度即可。。。)
 #include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;
int d[];
bool bo[];
int bianshu=;
void init(){
memset(d,,sizeof(d));
memset(bo,,sizeof(bo));
bianshu=;
}
int main(){
int x,y,cas=;
while(~scanf("%d%d",&x,&y))
{
if(x==-&&y==-){
break;
}
if(x==&&y==){
int bobo=;
int i;
for(i=;i<=;i++){
if(bo[i]&&d[i]==){
if(bobo==) bobo=;
else break;
}else
if(bo[i]&&d[i]!=){
break;
}
}
if(i<=) printf("Case %d is not a tree.\n",cas++);
else printf("Case %d is a tree.\n",cas++);
init();
continue;
}
d[y]++;
bo[x]=true;
bo[y]=true;
bianshu++;
}
return ;
}


(╭ ̄3 ̄)╭ 小希的迷宫II的更多相关文章

  1. ( ̄y▽ ̄)~ 智能手机II

    ( ̄y▽ ̄)~ 智能手机II TimeLimit: 3000/1000 MS (Java/Others)  MenoryLimit: 32768/32768 K (Java/Others) 64-bi ...

  2. HDU 1272 小希的迷宫 并查集

    小希的迷宫 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  3. hdu 1272 小希的迷宫

    小希的迷宫 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  4. 小希的迷宫(MST单棵树判断法则)

    小希的迷宫 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  5. hdu 1272 小希的迷宫 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1272 第二条并查集,和畅通工程的解法类似.判断小希的迷宫不符合条件,即有回路.我的做法是,在合并两个集 ...

  6. hdu 1257 小希的迷宫 并查集

    小希的迷宫 Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1272 D ...

  7. HDU 1272 小希的迷宫 (并查集)

    小希的迷宫 题目链接: http://acm.hust.edu.cn/vjudge/contest/123393#problem/L Description 我们的小伙伴Bingo身为大二学长,他乐于 ...

  8. 小希的迷宫(HDU 1272 并查集判断生成树)

    小希的迷宫 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  9. 小希的迷宫--hdu1272(并查集)

    小希的迷宫 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

随机推荐

  1. get_class_vars 返回由类的默认属性组成的数组

    get_class_vars (PHP 4, PHP 5) get_class_vars - 返回由类的默认属性组成的数组 说明 array get_class_vars ( string $clas ...

  2. 那些年,我们被耍过的bug——haslayout

    你被IE的bug耍过几次了? IE,这个令所有网站设计人员讨厌,但又不得不为它工作的浏览器.不论是6.7还是8,它们都有一个共同的渲染标准haslayout,所以haslayout 是一个非常有必要彻 ...

  3. 笔记本光驱位安装固态硬盘及window系统一些过程记录

    自己的笔记本电脑是13年买的  联想G480 i3  32位 2g内存,配置有点低,呵呵.当初刚毕业问家里要钱买的,到现在后悔没有买好一点的笔记本. 用着用着感觉内存不够用,网上就买了根内存条,买之前 ...

  4. some idea for my personal page

    firstly, dump the old personal page source from Github to Dropbox.then the idea is: 1: make a fake s ...

  5. 用DriverBackUp备份了文件 装好系统后怎么把备份的驱动文件还原

    1.打开DriverBackUp 2.菜单栏选择Restore 3.选择open backup file 4.找到备份文件位置,并选择.bki后缀的文件 5.点击"打开" 6.勾选 ...

  6. android教学大纲

    android班 教学大纲 个小时 次课:Android开发环境搭建及工具介绍 Android系统简介 Android开发环境简介及搭建 AndroidStudio提供的工具组件 次课:第一个Andr ...

  7. MYSQL 命令行导入导出数据库文件

    MYSQL命令行导入数据库 1.首先通过命令行进入到mysql安装目录的bin目录下,比如我输入的命令为: cd E:\MySQL\MySQL Server 5.5\bin,输入如下命令: mysql ...

  8. HDU 1847 Good Luck in CET-4 Everybody! 博弈

    题目思路: 写出SG函数(1表示先手胜,0表示先手负) 110110110110-- 发现n%3==0时,Cici胜 #include<stdio.h> #include<strin ...

  9. 用 Python 脚本实现对 Linux 服务器的网卡流量监控

    *这篇文章网上已经有相关代码,为了加深印象,我做了相关批注,希望对朋友们有帮助 工作原理:基于/proc文件系统 Linux 系统为管理员提供了非常好的方法,使其可以在系统运行时更改内核,而不需要重新 ...

  10. C1FlexGrid小结(转自http://www.cnblogs.com/C1SupportTeam/archive/2012/12/11/2812316.html)

    C1FlexGrid控件来对一个表格格式中的数据进行显示,编辑,组和总结.该表格可以绑定到一个数据源,它可以对自己的数据进行管理. C1FlexGrid控件有一个包含以下元素的丰富的对象模型: 以下的 ...