NYOJ-129 并查集
这个题基本上是并查集稍微一变, 只是加了一些判断条件而已,就是将点合并成树, 最后遍历一下, 统计一下有多少棵树, 如果不是1的话, 肯定不是树,所以,可以根据这个来判断
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std; const int MAX = ;
int f[MAX], IN[MAX], k = , sum = ;//IN表示节点的入度
bool visit[MAX];/*标记数组中的点是否存在, 就是是否是图中的点,
只要是输入的点, 其visit全部为true*/
bool flag;//标记是否是树
//初始化
void init()
{
for(int i = ; i < MAX; i++)
f[i] = i;
}
//找到它的父亲
int getf(int i)
{
if(i != f[i])
{
f[i] = getf(f[i]);//路径压缩
}
return f[i];
}
//合并函数,
void merge(int i, int j)
{
int t1 = getf(i);
int t2 = getf(j);
if(t1 != t2)
{
f[t2] = t1;
}
else
flag = false;//如果输入的点已经存在
} int main()
{
int x, y;
flag = true;
int max_num = ;
memset(f, , sizeof(f));
memset(IN, , sizeof(IN));
memset(visit, false, sizeof(visit));
init();
while(scanf("%d %d", &x, &y))
{
if(x == - && y == -)
break;
if(x == && y == )
{
sum = ;
for(int i = ; i <= max_num; i++)
{
if(visit[i] && i == f[i])//如果是根节点, 也就是树的个数
sum++;
}
for(int i = ; i <= max_num; i++)
if(visit[i] && IN[i] > )//如果一个节点的入度大于1
flag = false;
if(sum > )
flag = false;
if(flag)
printf("Case %d is a tree.\n", ++k);
else
printf("Case %d is not a tree.\n", ++k);
memset(f, , sizeof(f));
memset(visit, false, sizeof(visit));
memset(IN, , sizeof(IN));
flag = true;
init();
}
else
{
if(!flag)
continue;
max_num = max(max_num, max(x, y));
visit[x] = true;//标记此点在图中
visit[y] = true;
IN[y]++;//将第二个点的入度加一
merge(x, y);
}
}
return ;
}
NYOJ-129 并查集的更多相关文章
- NYOJ 129 树的判定 (并查集)
题目链接 描述 A tree is a well-known data structure that is either empty (null, void, nothing) or is a set ...
- Nyoj 布线问题(并查集&&图论)
描述南阳理工学院要进行用电线路改造,现在校长要求设计师设计出一种布线方式,该布线方式需要满足以下条件:1.把所有的楼都供上电.2.所用电线花费最少 输入 第一行是一个整数n表示有n组测试数据.(n ...
- nyoj 1022 合纵连横 经典并查集
思路:关键在于并查集的删点操作. 给每个诸侯国一个另外的编号,比如box[i]表示诸侯国i现在处于第box[i]个联盟,可以随时改变它的联盟编号,并且让box[i] = k, 实现删除操作.以前联盟中 ...
- NYOJ 208 Supermarket (模拟+并查集)
题目链接 描述 A supermarket has a set Prod of products on sale. It earns a profit px for each product x∈Pr ...
- NYOJ 1022 合纵连横 (并查集)
题目链接 描述 乱世天下,诸侯割据.每个诸侯王都有一片自己的领土.但是不是所有的诸侯王都是安分守己的,实力强大的诸侯国会设法吞并那些实力弱的,让自己的领土面积不断扩大.而实力弱的诸侯王为了不让自己的领 ...
- NYOJ 42 一笔画问题 (并查集+欧拉回路 )
题目链接 描述 zyc从小就比较喜欢玩一些小游戏,其中就包括画一笔画,他想请你帮他写一个程序,判断一个图是否能够用一笔画下来. 规定,所有的边都只能画一次,不能重复画. 输入 第一行只有一个正整数 ...
- nyoj 711 枚举+并查集
#include<stdio.h>//从大到小不断枚举边直到找到s-t的路径,判断从s可以到t可以用并查集来判断 #include<stdlib.h>//枚举最大的一条边肯定 ...
- poj 1182 食物链 && nyoj 207(种类并查集)
食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 52414 Accepted: 15346 Description ...
- nyoj 209 + poj 2492 A Bug's Life (并查集)
A Bug's Life 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 Background Professor Hopper is researching th ...
- nyoj 1022 合纵连横 (并查集<节点删除>)
合纵连横 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 乱世天下,诸侯割据.每个诸侯王都有一片自己的领土.但是不是所有的诸侯王都是安分守己的,实力强大的诸侯国会设法 ...
随机推荐
- [置顶] Spring的DI依赖实现分析
DI(依赖注入)是Spring最底层的核心容器要实现的功能之一,利用DI可以实现程序功能的控制反转(控制反转即程序之间之间的依赖关系不再由程序员来负责,而是由Spring容器来负责) 一个简单的例子( ...
- adb server is out of date. killing... 解决方案
忘了原文从哪来的了,过后查到补上链接 今天调试android的时候发现一个诡异的问题 C:\Users\xxxx>adb start-server adb server is out of ...
- Ajax的原理和运行机制
关于ajax,是最近炒得非常火的一种技术,并且时下它也是非常流行.当然,它并不是什么新技术,而是在各种已有的技术和支持机制下的一个统一.在我的项目中,偶尔也会用到ajax,用来给用户一些无刷新的体验. ...
- ViewData与ViewBag比较
在Asp.net MVC 3 web应用程序中,我们会用到ViewData与ViewBag,对比一下: ViewData ViewBag 它是Key/Value字典集合 它是dynamic类型对像 从 ...
- linux处理闰秒
闰秒的介绍可以参考维基百科 https://zh.wikipedia.org/wiki/闰秒 linux处理闰秒 Linux使用UTC时钟,并通过NTP (Network time protocol) ...
- Js点餐加减数量
<button class="add-on" onclick="chgNum(1,'del')" ><i class="icon-m ...
- powerpoint取色器有什么用|ppt取色器使用教程
在使用powerpoint过程中常常发现一些功能我们很少用到,其实是自己不会用的原因,关于powerpoint取色器有什么用呢?接下来我们一起来学一下ppt取色器使用教程. powerpoint取色器 ...
- Netty笔记--ByteBuf释放
参考资料:http://www.maljob.com/pages/newsDetail.html?id=394 参考资料:http://www.blogjava.net/liuguly/archive ...
- poj Pie
http://poj.org/problem?id=3122 #include<cstdio> #include<cstring> #include<cmath> ...
- perl /m
<pre name="code" class="html">[root@backoffice01 ~]# cat a1.pl my $_=" ...