1336:【例3-1】找树根和孩子

file

// YBT1336
#include<bits/stdc++.h>
using namespace std;

const int N = 200;
int fa[N],cnt[N];
vector<int> g[N];

int find(int x) { // 寻找某节点的祖先
    if (fa[x] == x) return x;
    return find(fa[x]);
}

int main(){
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=n;i++) fa[i]=i; // 初始每个节点父亲都是自己
    for(int i=1;i<=m;i++){
        int x,y;
        cin>>x>>y;
        fa[y]=x; // 将y的父亲设为x
        cnt[x]++; // x的儿子数+1
        g[x].push_back(y); // 将y加入x的儿子列表
    }
    cout<<find(1)<<endl;// 随意从任意节点都可寻找到祖先
    int ans = 1,cmp = 0; // ans为孩子最多的节点,cmp为孩子最多的节点的儿子数
    for(int i=1;i<=n;i++){
        if(cnt[i] > cmp){ // 打擂台
            cmp = cnt[i]; 
            ans = i;
        }
    }
    cout<<ans<<endl; // 输出孩子最多的节点
    for(int i=0;i<g[ans].size();i++){
        cout<<g[ans][i]<<" "; // 输出孩子最多的节点的儿子
    }

    return 0;
}

类似文章

一条评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注