/*
 题意:有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相关推荐

  1. sicily 1034 Forest

    2019独角兽企业重金招聘Python工程师标准>>> Description In the field of computer science, forest is importa ...

  2. 1034. Forest

    TAG 数据结构 树 树的深度 宽度 虽然是水题,情况没处理好,还wa了几次,囧. #include <stdio.h> #include <memory.h> const i ...

  3. sicily题目分类

    sicily题目分类 1. 编程入门 2. 数据结构 3. 字符串 4. 排序 5. 图遍历 6. 图算法 7. 搜索:剪枝,启发式搜索 8. 动态规划/递推 9. 分治/递归 10. 贪心 11. ...

  4. [sicily]部分题目分类

    sicily题目分类 1. 编程入门 2. 数据结构 3. 字符串 4. 排序 5. 图遍历 6. 图算法 7. 搜索:剪枝,启发式搜索 8. 动态规划/递推 9. 分治/递归 10. 贪心 11. ...

  5. Sicily 题目分类

    依照自己水平挑着做→ →~~ 1. 编程入门 2. 数据结构 3. 字符串 4. 排序 5. 图遍历 6. 图算法 7. 搜索:剪枝,启发式搜索 8. 动态规划/递推 9. 分治/递归 10. 贪心 ...

  6. 中大SICILY分类

    原文出处:http://linguifan2010.blog.163.com/blog/static/1315127442010102131322482/ ********************** ...

  7. Soj题目分类 python代码)

    正值期末复习,刷点soj放松下 但想看看能不能在找点关于数据结构的题目来做一下. 在网上看到有不少人上传过那些关于部分SOJ题目的描述,但是说实话有些乱 不过我看到有个网页中包含的一个类似文档的东西, ...

  8. 初学者acm的练习题指南

    上机练习题参考题 忘了在哪找的啦~~希望对大家有帮助呦 <!--[if !supportLists]-->1.    <!--[endif]-->Programming Bas ...

  9. 编程题目分类(剪辑)

    1. 编程入门 2. 数据结构 3. 字符串 4. 排序 5. 图遍历 6. 图算法 7. 搜索:剪枝,启发式搜索 8. 动态规划/递推 9. 分治/递归 10. 贪心 11. 模拟 12. 算术与代 ...

最新文章

  1. CVPR 2020录用率十年最低,商汤官宣62篇入选
  2. 一次“ora-12170 tns 连接超时”的经历
  3. Python 绘制出酷炫的三维图
  4. 玩转Google开源C++单元测试框架Google Test系列(gtest)之五 - 死亡测试
  5. java 多线程池_Java项目中,线程池中线程数量太大会有什么影响?
  6. jdk 安装_Linux入门之Linux CentOS安装jdk
  7. 解读年度数据库PostgreSQL:如何巧妙地实现缓冲区管理器
  8. ModelArts 与HiLens Kit联合开发丨行人社交距离风险提示Demo
  9. Tornado之异步authenticated
  10. 模板函数:将string类型变量转换为常用的数值类型和常用的数值类型转String
  11. 汽车CAN总线系统原理、设计与应用 第二章CAN总线的基本原理 ---- 个人自学笔记
  12. 网上流传房地产崩盘时间表 楼市重蹈日本覆辙 - 新闻中心 - 搜狐焦点网
  13. 无盘服务器教程,无盘入门教程之解读无盘构造
  14. 云通讯这局棋,声网、容联云怎么破?
  15. 公开「处刑」!波士顿动力的搬砖机器人,私下竟「翻车」不断
  16. 微信小程序----对接OneNet平台(测试版)
  17. 以梦为马之89c51单片机精确1s时间LED灯闪烁(中断技术+定时/计数器技术)
  18. c语言中“函数的定义不可以嵌套,但函数的调用可以嵌套
  19. RNA-seq结果图片如何解读(火山图、韦恩图、聚类热图和折线图)
  20. SAP 使用SAP HANA XS OData接口

热门文章

  1. java堆中的组成部分,初识Java虚拟机的基本结构 | If Coding
  2. python爬取音乐_利用Python对网易云音乐进行爬取!无所不爬的爬虫啊!
  3. 多线程处理大文件_Java内存映射,上G大文件轻松处理
  4. 绝了!华为、H3C、锐捷交换机配置命令大全
  5. java多个数求和_Java:多个数求和
  6. css 两边到中间 渐变_css3渐变过渡机制
  7. java 连接两个arraylist,java – 在两个线程之间共享一个ArrayList?
  8. 【杂谈】面向新手的深度学习开源框架指导手册与GitHub项目,欢迎加入我们的开源团队...
  9. 【杂谈】有三AI不得不看的技术综述(超过100篇核心干货)
  10. 【NLP-NER】什么是命名实体识别?