2 条题解

  • 0
    @ 2025-12-16 14:16:16

    图论

    简单路径不能经过一个点两次,因此如果一个点有 3 条或者更多条边,就一定会有走不到的边。

    因此这棵树一定会是一条链,那么我们只需要找到链的两个端点即可。

    如果你知道点的度数的话应该很容易想到:链端点(即树的叶子节点)的度数是为 1 的,非端点(非叶子节点)的度数为 2 。

    因此我们只要计算每个点的度数,答案就是度数为 1 的两个点(并且度数为 1 的点有且只有两个)。

    时间复杂度 O(n)O(n)

    #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
    上传者