返回题解分享
讨论 / 题解分享/ 帖子详情

树根与孩子 - 题解

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

const int N = 1010;
vector<int> g[N];
int parent[N];

void link(int x, int y) {
    g[x].push_back(y);
    parent[y] = x;
}

int main() {
    int n, m;
    cin >> n >> m;

    for (int i = 1; i <= n; i++) {
        parent[i] = 0;
    }

    for (int i = 1; i <= m; i++) {
        int x, y;
        cin >> x >> y;
        link(x, y);
    }

    //树根
    int root = 0;
    for (int i = 1; i <= n; i++) {
        if (parent[i] == 0)
        root = i;
    }
    cout << root << endl;

    //孩子最多的结点
    int max_children_node = 0;
    int max_children_count = 0;
    for (int i = 1; i <= n; i++) {
        int len = g[i].size();
        if (len >= max_children_count) {
            max_children_count = len;
            max_children_node = i;
        }
    }
    cout << max_children_node << endl;

    //孩子最多的结点的孩子的编号
    vector<int> children = g[max_children_node];

    sort(children.begin(), children.end());
    int length = children.size();
    for (int i = 0; i < length; i++) {
        if (i != 0) cout << " ";
        cout << children[i];
    }

    return 0;
}
0 回复 0 转发 0 喜欢 3 阅读
回复 (0)
默认 最新
暂无回复,快来抢沙发!