HDU 1325 拓扑排序
根据题目所给的3个不符合情况的条件,一个个判断图是否符合这3个条件即可
1.不能出现内部环,拓扑排序判断
2.不能有超过1个点的入度为0,因为只有一个树根
3.每个点最多一个入度
这里要注意的一点是这个点的数字是乱给的,所以最大值为8,但实际上不一定有8个点,这里记录一个最大值的参数,和一个总共点数的参数来进行判断即可
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std; const int N = ;
int in[N] , first[N] , k , maxn , del , sum;//maxn记录总共的点的个数,del记录删除了的点的个数 struct Edge{
int y , next;
}e[N<<]; void add_edge(int x , int y )
{
e[k].y = y , e[k].next = first[x];
first[x] = k++;
} void tuopu(int src)
{
del++;
for(int i = first[src] ; i!=- ; i=e[i].next){
int v = e[i].y;
in[v]--;
if(!in[v]) tuopu(v);
}
} int main()
{
// freopen("a.in" , "r" , stdin);
int x , y , cas = ;
while(~scanf("%d%d" , &x , &y)){
if(x < && y < ) break; memset(first , - , sizeof(first));
memset(in , - , sizeof(in));
k = , maxn = , sum = ;//sum表示总共点的个数
int cnt = , root , flag = ; //cnt记录有多少节点可以作为顶点了,flag作为判断是否有点超过1个入度
while(x != || y!=){
add_edge(x , y);
maxn = max(max(maxn , x) , y);
if(in[x] < ) in[x] = , sum++;
if(in[y] < ) in[y] = , sum++;
in[y]++;
if(in[y] >= ){
flag = ;
}
scanf("%d%d" , &x , &y);
}
// cout<<"maxn: "<<maxn<<endl;
if(flag){
// cout<<"有点超过两个入度 "<<endl;
printf("Case %d is not a tree.\n" , ++cas);
continue;
}
for(int i = ; i<=maxn ; i++)
if(!in[i]){
root = i;
cnt++;
if(cnt>=) break;
}
if(cnt >= ){
// cout<<"有超过两个点可作为树根 "<<endl;
printf("Case %d is not a tree.\n" , ++cas);
continue;
}
del = ;
tuopu(root);
if(del < sum)
{
// cout<<"出现内部环 "<<endl;
printf("Case %d is not a tree.\n" , ++cas);
}
else
printf("Case %d is a tree.\n" , ++cas);
}
return ;
}
HDU 1325 拓扑排序的更多相关文章
- HDU 4857 拓扑排序 优先队列
n个数,已经有大小关系,现给m个约束,规定a在b之前,剩下的数要尽可能往前移.输出序列 大小关系显然使用拓扑结构,关键在于n个数本身就有大小关系,那么考虑反向建图,优先选择值最大的入度为零的点,这样得 ...
- HDU 1811 拓扑排序 并查集
有n个成绩,给出m个分数间的相对大小关系,问是否合法,矛盾,不完全,其中即矛盾即不完全输出矛盾的. 相对大小的关系可以看成是一个指向的条件,如此一来很容易想到拓扑模型进行拓扑排序,每次检查当前入度为0 ...
- HDU 5638 拓扑排序+优先队列
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5638 题意: 给你一个DAG图,删除k条边,使得能个得到字典序尽可能小的拓扑排序 题解: 把拓扑排序 ...
- hdu 2647 (拓扑排序 邻接表建图的模板) Reward
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=2647 老板给员工发工资,每个人的基本工资都是888,然后还有奖金,然后员工之间有矛盾,有的员工希望比某员 ...
- 传递 hdu 5961 拓扑排序有无环~
题目:http://acm.hdu.edu.cn/showproblem.php?pid=5961 题目为中文,这里就不描述题意了. 思路: 从题目陈述来看,他将一个有向图用一个邻接矩阵来表示,并且分 ...
- hdu 4324 拓扑排序
题意:给出一堆人的喜爱关系,判断有没有三角恋-_-|| 其实就是判断是否存在三条边的环. 一开始我是这么想的: 先拓扑排序,如果没有环那就直接No 如果有环?挑出环里的任意一个点(拓扑排序结束后不在拓 ...
- HDU 4324 (拓扑排序) Triangle LOVE
因为题目说了,两个人之间总有一个人喜欢另一个人,而且不会有两个人互相喜欢.所以只要所给的图中有一个环,那么一定存在一个三元环. 所以用拓扑排序判断一下图中是否有环就行了. #include <c ...
- HDU 5438 拓扑排序+DFS
Ponds Time Limit: 1500/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Sub ...
- hdu 3342 拓扑排序 水
好久没切题 先上水题! 拓扑排序! 代码: #include<iostream> #include<cstdio> #include<cstring> using ...
随机推荐
- bzoj 4596: [Shoi2016]黑暗前的幻想乡【容斥原理+矩阵树定理】
真是简单粗暴 把矩阵树定理的运算当成黑箱好了反正我不会 这样我们就可以在O(n^3)的时间内算出一个无向图的生成树个数了 然后题目要求每个工程队选一条路,这里可以考虑容斥原理:全选的方案数-不选工程队 ...
- 【BZOJ4009_洛谷3242】[HNOI2015] 接水果(整体二分)
题目: 洛谷 3242 分析: 明确题意:在一棵树上给定若干权值为 \(w\) 的路径 \((u,v)\) (盘子),每次给定 \((a,b)\) (水果),询问所有满足 \((u,v)\) 被 \( ...
- 创建 pulic dblink 使不同的用户可以访问dblink
1. system: grant create public database link to ivrsdata; 2.userdate: tnsnames.ora config db connect ...
- uiautomatorviewer详解
一,uiautomatorviewer是什么? Android 4.1发布的,uiautomator是用来做UI测试的.也就是普通的手工测试,点击每个控件元素 看看输出的结果是否符合预期.比如 登陆界 ...
- Storm概念学习系列之storm的优化
不多说,直接上干货!
- Echarts修改legend样式
legend: { icon: 'rect', itemWidth: 20, itemHeight: 10, itemGap: 10}
- poj2502 Subway
思路: 需要注意的地方:一条地铁线路并不一定和样例描述的那样是直的:同一条线路上的两个站点步行可能更快. 实现: #include <iostream> #include <cstd ...
- firefox浏览器中 bootstrap 静态弹出框中select下拉框不能弹出(解决方案)
问题出现场景1: 在firefox浏览器中在bootstrap弹出的modal静态框中再次弹出一个静态框时 select下拉框不能弹出选项 解决方案:去掉最外层静态框的 tabindex=" ...
- 60查找nanopim1plus的HDMI为720p输出的问题
60查找nanopim1plus的HDMI为720p输出的问题 大文实验室/大文哥 壹捌陆捌零陆捌捌陆捌贰 21504965 AT qq.com 完成时间:2017/12/5 17:51 版本:V1. ...
- CentOS6.6从头到尾部署nginx与tomcat多实例
前提条件: 1.需要一个全新的centos系统(本文中用到是centos6.6) 2.vmware虚拟机 3.vmware下安装centos系统,以NAT方式与宿主机相连 4.在centos系统中pi ...