1021. Deepest Root (25)
2018-03-03 13:03
281 查看
1021. Deepest Root (25)
时间限制 1500 ms 内存限制 65536 kB 代码长度限制 16000 B
判题程序 Standard 作者 CHEN, Yue
A graph which is connected and acyclic can be considered a tree. The height of the tree depends on the selected root. Now you are supposed to find the root that results in a highest tree. Such a root is called the deepest root.
Input Specification:
Each input file contains one test case. For each case, the first line contains a positive integer N (<=10000) which is the number of nodes, and hence the nodes are numbered from 1 to N. Then N-1 lines follow, each describes an edge by given the two adjacent nodes’ numbers.
Output Specification:
For each test case, print each of the deepest roots in a line. If such a root is not unique, print them in increasing order of their numbers. In case that the given graph is not a tree, print “Error: K components” where K is the number of connected components in the graph.
Sample Input 1:
5
1 2
1 3
1 4
2 5
Sample Output 1:
3
4
5
Sample Input 2:
5
1 3
1 4
2 5
3 4
Sample Output 2:
Error: 2 components
思路:针对每一个顶点u进行广度优先遍历即可
时间限制 1500 ms 内存限制 65536 kB 代码长度限制 16000 B
判题程序 Standard 作者 CHEN, Yue
A graph which is connected and acyclic can be considered a tree. The height of the tree depends on the selected root. Now you are supposed to find the root that results in a highest tree. Such a root is called the deepest root.
Input Specification:
Each input file contains one test case. For each case, the first line contains a positive integer N (<=10000) which is the number of nodes, and hence the nodes are numbered from 1 to N. Then N-1 lines follow, each describes an edge by given the two adjacent nodes’ numbers.
Output Specification:
For each test case, print each of the deepest roots in a line. If such a root is not unique, print them in increasing order of their numbers. In case that the given graph is not a tree, print “Error: K components” where K is the number of connected components in the graph.
Sample Input 1:
5
1 2
1 3
1 4
2 5
Sample Output 1:
3
4
5
Sample Input 2:
5
1 3
1 4
2 5
3 4
Sample Output 2:
Error: 2 components
思路:针对每一个顶点u进行广度优先遍历即可
#define _CRT_SECURE_NO_WARNINGS #include <algorithm> #include <iostream> #include <cstring> #include <iomanip> #include <vector> #include <string> #include <cfloat> #include <queue> #include <map> typedef struct lnode { int data; int next; lnode() { next = -1; } }LNode; using namespace std; const int MaxN = 10010; vector<int>G[MaxN]; vector<int> root; bool isInq[MaxN]; int deep = 0; void BFS(int st) { queue<int> que, backque; que.push(st); isInq[st] = true; int tdeep = 0; while (que.size()) { while (que.size()) { int u = que.front(); que.pop(); for (int i = 0; i < G[u].size(); ++i) { int v = G[u][i]; if (!isInq[v]) { backque.push(v); isInq[v] = true; } } } ++tdeep; swap(que, backque); } if (tdeep > deep) { root.clear(); root.push_back(st); deep = tdeep; } else if (tdeep == deep) root.push_back(st); } int main() { #ifdef _DEBUG freopen("data.txt", "r+", stdin); #endif // _DEBUG std::ios::sync_with_stdio(false); int n; cin >> n; for (int i = 1; i < n; ++i) { int u, v; cin >> u >> v; G[u].push_back(v); G[v].push_back(u); } BFS(1); bool connected = true; int com = 1; for (int i = 2; i <= n; ++i) { if (!isInq[i]) { connected = false; ++com; BFS(i); } } if (!connected) { cout << "Error: " << com << " components"; return 0; } for (int i = 2; i <= n; ++i) { memset(isInq, 0, sizeof(isInq)); BFS(i); } for (int i = 0; i < root.size(); ++i) cout << root[i] << endl; return 0; }
相关文章推荐
- 1021. Deepest Root (25)
- 【PAT】1021. Deepest Root (25)
- PAT甲题题解-1021. Deepest Root (25)-dfs+并查集
- 1021. Deepest Root (25)
- 1021. Deepest Root (25) PAT 甲级
- PAT (Advanced Level) Practise 1021 Deepest Root (25)
- 【PAT甲级】1021. Deepest Root (25)
- PAT 1021. Deepest Root (25)
- PAT 甲级 1021. Deepest Root (25)
- PAT - 甲级 - 1021. Deepest Root (25)(DFS图的连通分量,最大深度)
- 1021. Deepest Root (25)
- PAT (Advanced Level)1021. Deepest Root (25)
- 1021. Deepest Root (25)
- PAT 1021 Deepest Root (25) (并查集+DFS)
- 1021. Deepest Root (25)
- PAT-A 1021 Deepest Root (25)
- 1021. Deepest Root (25)
- PAT(甲级)1021. Deepest Root (25)
- 浙大 PAT Advanced level 1021. Deepest Root (25)
- PAT (Advanced Level) Practise 1021 Deepest Root (25)