PAT甲1021. Deepest Root (25)

#include <cstdio>
#include <cstdlib>
#include <map>
#include <iostream>
#include <string>
#include <vector>
#include <queue>
using namespace std;


const int maxn=10010;
int N;
vector<int> G[maxn];
bool vis[maxn]={false};
int result[maxn];
int maxh=0,maxresult=0;

void DFS(int now,int lay)
{
    if(vis[now]==true)return;
    vis[now]=true;
    lay++;
    if(lay>maxh)
    {
        maxh=lay;
    }
    for(int i=0;i<G[now].size();i++)
    {
        if(vis[G[now][i]]==false)
        {
            DFS(G[now][i],lay);
        }
    }
}

int DFST(int x)
{
    int num=1;
    DFS(x,0);
    for(int i=1;i<=N;i++)
    {
        if(vis[i]==false)
        {
            DFS(i,0);
            num++;
        }
    }
    return num;
}


int main()
{
    bool flag=false;
    scanf("%d",&N);
    for(int i=1;i<=N-1;i++)
    {
        int id1,id2;
        scanf("%d%d",&id1,&id2);
        G[id1].push_back(id2);
        G[id2].push_back(id1);
    }
    int c;
    for(int i=1;i<=N;i++)
    {
        for(int i=1;i<=N;i++)
        {
            vis[i]=false;
        }
        maxh=0;
        c=DFST(i);
        if(c==1)
        {
            result[i]=maxh;
            if(maxresult<maxh)
            {
                maxresult=maxh;
            }
            flag=true;
        }
        else break;
    }
    if(flag)
    {
        for(int i=0;i<=N;i++)
        {
            if(result[i]==maxresult)
            {
                printf("%d\n",i);
            }
        }
    }
    else
    {
        printf("Error: %d components\n",c);
    }
    system("pause");
    return 0;
}

猜你喜欢

转载自blog.csdn.net/yhy489275918/article/details/80230268
今日推荐