sicily 1034. Forest
来源:互联网 发布:篮球比赛编排软件 编辑:程序博客网 时间:2024/06/04 20:13
1034. Forest
Constraints
Time Limit: 1 secs, Memory Limit: 32 MB
Description
In the field of computer science, forest is important and deeply researched , it is a model for many data structures . Now it’s your job here to calculate the depth and width of given forests.
Precisely, a forest here is a directed graph with neither loop nor two edges pointing to the same node. Nodes with no edge pointing to are roots, we define that roots are at level 0 . If there’s an edge points from node A to node B , then node B is called a child of node A , and we define that B is at level (k+1) if and only if A is at level k .
We define the depth of a forest is the maximum level number of all the nodes , the width of a forest is the maximum number of nodes at the same level.Input
There’re several test cases. For each case, in the first line there are two integer numbers n and m (1≤n≤100, 0≤m≤100, m≤n*n) indicating the number of nodes and edges respectively , then m lines followed , for each line of these m lines there are two integer numbers a and b (1≤a,b≤n)indicating there’s an edge pointing from a to b. Nodes are represented by numbers between 1 and n .n=0 indicates end of input.
Output
For each case output one line of answer , if it’s not a forest , i.e. there’s at least one loop or two edges pointing to the same node, output “INVALID”(without quotation mark), otherwise output the depth and width of the forest, separated by a white space.
Sample Input
1 01 11 13 11 32 21 22 10 88
Sample Output
0 1INVALID1 2INVALID
题目分析
求森林最大宽度与深度
拓扑排序,若存在环则失败
每轮确定入度为零的节点数即为该层的宽度
轮数即为深度
一直WA是忽略了题目还限制了不存在两条边指向一个节点,即每个点的入度必须<=1
#include <iostream>#include <vector>#include <memory.h>struct Node { int indegree; std::vector<int> child;};int main(){ int num, edge; while (std::cin >> num >> edge && num != 0) { Node nodes[num+1]; for (int i = 1; i <= num; ++i) { nodes[i].indegree = 0; } bool visited[num+1]; memset(visited, false, sizeof(visited)); bool valid = true; int papa, son; for (int i = 0; i < edge; ++i) { std::cin >> papa >> son; nodes[son].indegree++; nodes[papa].child.push_back(son); if (nodes[son].indegree == 2) valid = false; } if (!valid) { std::cout << "INVALID" << std::endl; continue; } int height = -1; int width = 0; int count = 0; while (true) { std::vector<int> root; for (int i = 1; i <= num; ++i) { if (!visited[i] && nodes[i].indegree == 0) { root.push_back(i); } } if (root.size() == 0) break; width = width < root.size() ? root.size() : width; for (int i = 0; i < root.size(); ++i) { visited[root[i]] = true; count++; for (int j = 0; j < nodes[root[i]].child.size(); ++j) nodes[nodes[root[i]].child[j]].indegree--; } height++; } if (count == num) std::cout << height << " " << width << std::endl; else std::cout << "INVALID" << std::endl; }}
- Sicily 1034. Forest
- Sicily 1034. Forest
- [sicily online]1034. Forest
- sicily 1034.Forest
- Sicily 1034. Forest
- sicily 1034. Forest
- Sicily---1034. Forest
- sicily-1034. Forest
- Sicily 1034 Forest(DFS)
- sicily 1034(Forest)
- Sicily 1034 Forest
- Sicily 1034 Forest
- #sicily#1004. Forest
- 1034. Forest
- 1034. Forest
- 1034. Forest
- 1034. Forest
- SOJ 1034. Forest
- PHP核心技术与最佳实践学习(一)面向对象
- 【SSH进阶之路】Hibernate基本映射(三)
- JS-Array对象
- 矩形覆盖
- android的List布局的简单记发
- sicily 1034. Forest
- http状态码大全
- cf#238
- iOS中的内存泄露问题
- web前端性能监控
- 【SSH进阶之路】Hibernate映射——多对一单向关联映射(四)
- 二进制中1的个数
- java.util包详解
- Machine Learning week 3 quiz : Regularization