1 solutions

  • 0
    @ 2024-3-30 20:31:32
    #include <iostream>
    #include <iomanip>
    #include <string>
    #include <algorithm>
    #include <cmath>
    #include <string>
    #include <list>
    #include <map>
    #include <set>
    #include <queue>
    #include <vector>
    #include <stack>
    using namespace std;
    struct Node{
        int ch[205];
    }nod[205];
    int node[105];
    int b[1005],a[105][105];
    int maxx=-1e9,max_i;
    int cnt=0;
    int main(){
        int n,m,root;
        int x,y,j=1,i=1,flag=0;
        cin>>n>>m;
        while(m--)
        {
            cin>>x>>y;
            if(i==1)//给的树是按照层级给的 所以第一个输入进去的是根
                root=x;
            b[x]++;//下标法。x的儿子数量增加
            
            if(b[x]>maxx)//求到儿子最多的节点
            {
                maxx=b[x];
                max_i=x;
            }
            
            if(x==flag)//如果父亲还是同一个
            {
                j++;
                a[x][j]=y;
            }
            else
            {
                j=1;
                a[x][j]=y;
            }
            //其实也可以直接用二维vector存...
            flag=x;//flag存上一个父节点的序号
            i++;
        }
        cout<<root<<endl;
        cout<<max_i<<endl;
        for(int i=1;i<=maxx;i++)
        {
            cout<<a[max_i][i]<<' ';
        }
        
        return 0;
    }
    

    Information

    ID
    6852
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    10
    Tags
    (None)
    # Submissions
    3
    Accepted
    2
    Uploaded By