2 条题解
-
0
图论
简单路径不能经过一个点两次,因此如果一个点有 3 条或者更多条边,就一定会有走不到的边。
因此这棵树一定会是一条链,那么我们只需要找到链的两个端点即可。
如果你知道点的度数的话应该很容易想到:链端点(即树的叶子节点)的度数是为 1 的,非端点(非叶子节点)的度数为 2 。
因此我们只要计算每个点的度数,答案就是度数为 1 的两个点(并且度数为 1 的点有且只有两个)。
时间复杂度 。
#include<bits/stdc++.h> using namespace std; int main(){ int n; cin >> n; vector<int> in(n + 1); for(int i = 1; i < n; i++){ int u, v; cin >> u >> v; in[u]++; in[v]++; } vector<int> ans; for(int i = 1; i <= n; i++){ if(in[i] == 1) ans.push_back(i); if(in[i] > 2){ cout << -1 << endl; return 0; } } for(auto &i : ans){ cout << i << " "; } cout << endl; }
信息
- ID
- 158
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 3
- 标签
- 递交数
- 37
- 已通过
- 16
- 上传者