sicily 1034. Forest
/*
题意:有n个结点,有m条边A->B,判断是不是森林, 如果一结点有两个结点以上同时指向它,即它的入度>1, 或者有环 , 即没有根节点,则不是森林, 若是森林的话,则输出它的深度和宽度, 宽度是指结点数最多的那一层 */ #include<iostream> // 求森林深度和宽度 #include<stdio.h>#include<cstring>#include <algorithm>using namespace std;#define maxn 120int g[maxn][maxn]; int in[maxn],height[maxn]; // in[i]表示结点i的入度数, height[i]表示结点i的高度int width[maxn]; // width[i]表示在高度i上的结点数 int main(){ int n,m,i; while(scanf("%d%d",&n,&m)&&n) { int suc=1; memset(g,0,sizeof(g)); memset(in,0,sizeof(in)); int a,b; while(m--) { scanf("%d%d",&a,&b); //结点下标从 1开始 g[a][b]=1; if(in[b]==0) in[b]=1; else //说明有两条边指向同个结点 suc=0; } if(!suc) { printf("INVALID\n"); continue; } memset(width,0,sizeof(width)); int q[maxn]; //队列存储入度为0的节点 int front=0,rear=0; for(i=1;i<=n;i++) { if(in[i]==0) { q[rear++]=i; //把根节点压入栈 height[i]=0; width[0]++; //一开始所有的根结点都在第0层,高度为 0 } } if(rear==0) //找不到根结点,说明有环 { printf("INVALID\n"); continue; } int num=0; // num记录遍历过的结点数 while(front<rear) { num++; int t=q[front++]; //结点t for(i=1;i<=n;++i) { if(g[t][i]) { height[i]=height[t]+1; //儿子节点的高度比父节点的高度大 1 width[height[i]]++; //在这一高度上的结点数加 1 q[rear++]=i; } } } if(num<n) //环内任意结点的入度都至少为1,都不会被压入队列,所以小于n说明存在环 { printf("INVALID\n"); continue; } printf("%d %d\n",*max_element(height+1,height+n+1),*max_element(width,width+n)); // 输出森林的高度和宽度,注意 height[i] 表示结点i的高度,而 width[i] 表示在高度i上的宽度// 高度的范围是从0到n-1,因为根结点是在第0层 } return 0;}
转载于:https://www.cnblogs.com/mjc467621163/archive/2011/07/04/2097673.html
sicily 1034. Forest相关推荐
- sicily 1034 Forest
2019独角兽企业重金招聘Python工程师标准>>> Description In the field of computer science, forest is importa ...
- 1034. Forest
TAG 数据结构 树 树的深度 宽度 虽然是水题,情况没处理好,还wa了几次,囧. #include <stdio.h> #include <memory.h> const i ...
- sicily题目分类
sicily题目分类 1. 编程入门 2. 数据结构 3. 字符串 4. 排序 5. 图遍历 6. 图算法 7. 搜索:剪枝,启发式搜索 8. 动态规划/递推 9. 分治/递归 10. 贪心 11. ...
- [sicily]部分题目分类
sicily题目分类 1. 编程入门 2. 数据结构 3. 字符串 4. 排序 5. 图遍历 6. 图算法 7. 搜索:剪枝,启发式搜索 8. 动态规划/递推 9. 分治/递归 10. 贪心 11. ...
- Sicily 题目分类
依照自己水平挑着做→ →~~ 1. 编程入门 2. 数据结构 3. 字符串 4. 排序 5. 图遍历 6. 图算法 7. 搜索:剪枝,启发式搜索 8. 动态规划/递推 9. 分治/递归 10. 贪心 ...
- 中大SICILY分类
原文出处:http://linguifan2010.blog.163.com/blog/static/1315127442010102131322482/ ********************** ...
- Soj题目分类 python代码)
正值期末复习,刷点soj放松下 但想看看能不能在找点关于数据结构的题目来做一下. 在网上看到有不少人上传过那些关于部分SOJ题目的描述,但是说实话有些乱 不过我看到有个网页中包含的一个类似文档的东西, ...
- 初学者acm的练习题指南
上机练习题参考题 忘了在哪找的啦~~希望对大家有帮助呦 <!--[if !supportLists]-->1. <!--[endif]-->Programming Bas ...
- 编程题目分类(剪辑)
1. 编程入门 2. 数据结构 3. 字符串 4. 排序 5. 图遍历 6. 图算法 7. 搜索:剪枝,启发式搜索 8. 动态规划/递推 9. 分治/递归 10. 贪心 11. 模拟 12. 算术与代 ...
最新文章
- CVPR 2020录用率十年最低,商汤官宣62篇入选
- 一次“ora-12170 tns 连接超时”的经历
- Python 绘制出酷炫的三维图
- 玩转Google开源C++单元测试框架Google Test系列(gtest)之五 - 死亡测试
- java 多线程池_Java项目中,线程池中线程数量太大会有什么影响?
- jdk 安装_Linux入门之Linux CentOS安装jdk
- 解读年度数据库PostgreSQL:如何巧妙地实现缓冲区管理器
- ModelArts 与HiLens Kit联合开发丨行人社交距离风险提示Demo
- Tornado之异步authenticated
- 模板函数:将string类型变量转换为常用的数值类型和常用的数值类型转String
- 汽车CAN总线系统原理、设计与应用 第二章CAN总线的基本原理 ---- 个人自学笔记
- 网上流传房地产崩盘时间表 楼市重蹈日本覆辙 - 新闻中心 - 搜狐焦点网
- 无盘服务器教程,无盘入门教程之解读无盘构造
- 云通讯这局棋,声网、容联云怎么破?
- 公开「处刑」!波士顿动力的搬砖机器人,私下竟「翻车」不断
- 微信小程序----对接OneNet平台(测试版)
- 以梦为马之89c51单片机精确1s时间LED灯闪烁(中断技术+定时/计数器技术)
- c语言中“函数的定义不可以嵌套,但函数的调用可以嵌套
- RNA-seq结果图片如何解读(火山图、韦恩图、聚类热图和折线图)
- SAP 使用SAP HANA XS OData接口
热门文章
- java堆中的组成部分,初识Java虚拟机的基本结构 | If Coding
- python爬取音乐_利用Python对网易云音乐进行爬取!无所不爬的爬虫啊!
- 多线程处理大文件_Java内存映射,上G大文件轻松处理
- 绝了!华为、H3C、锐捷交换机配置命令大全
- java多个数求和_Java:多个数求和
- css 两边到中间 渐变_css3渐变过渡机制
- java 连接两个arraylist,java – 在两个线程之间共享一个ArrayList?
- 【杂谈】面向新手的深度学习开源框架指导手册与GitHub项目,欢迎加入我们的开源团队...
- 【杂谈】有三AI不得不看的技术综述(超过100篇核心干货)
- 【NLP-NER】什么是命名实体识别?