(╭ ̄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. mac下 redis安装使用

    安装redis:brew install redis 开启redis服务:redis-server /usr/local/etc/redis.conf 重新打开一个命令窗口:redis-cli ,进入 ...

  2. CentOS7中将Mysql添加为系统服务

    如果是自己通过tar包安装的Mysql,不会自动添加到系统服务中,可通过如下方式,自己添加. 先启动一下mysql ${mysql}/support-files/mysql.server start ...

  3. 无法定位程序输入点__gxx_personality_v0的一个解决方法

    windows系统,使用mingw32-g++编译一个简单的工程,编译链接过程都没有错误提示,但是运行的时候会弹出提示框提示"无法定位程序输入点__gxx_personality_v0&qu ...

  4. Python基础知识学习_Day1

    1,python介绍 诞生于1989年圣诞节,目前越来越受到业界认可.应用领域十分广泛 云计算: 云计算最火的语言, 典型应用OpenStack WEB开发: 众多优秀的WEB框架,众多大型网站均为P ...

  5. C# 去除文件和文件夹的只读属性

    当我们使用 DirectoryInfo dir = Directory.CreateDirectory(pathName) 创建目录或者创建一个文件后,有时作为临时文件用完以后需要删除掉,使用File ...

  6. perl LWP::UserAgent获取源码与响应

    #!/usr/bin/perl -w use strict; use LWP::UserAgent; my $useragent = new LWP::UserAgent; my $url = 'ht ...

  7. windows10安装composer并解决和xdebug的冲突

    环境:windows10,php7,php安装目录C:\php\,php目录已加入windows的PATH. 1.下载composer,在Windows下最简单的办法是下载composer.phar并 ...

  8. linux的命令使用记录

    iptables禁止53端口的出包(dns) iptables -A OUTPUT -p udp --dport 53 -j DROP linux查看网络监听端口 netstat -npl 文件复制 ...

  9. SpringMVC的@ModelAttribute注解简单使用(用户修改信息)

    例如有一个User对象,我们要修改他的值,但是不能修改他的密码!通过表单提交数据之后,password为null,会把原对象的passwod覆盖掉.这时候可以用@ModelAttribute注解处理. ...

  10. 12款免费与开源的NoSQL数据库

    Naresh Kumar是位软件工程师与热情的博主,对于编程与新事物拥有极大的兴趣,非常乐于与其他开发者和程序员分享技术上的研究成果.近日,Naresh撰文谈到了12款知名的免费.开源NoSQL数据库 ...