• PAT Advanced Level 1021


    1021 Deepest Root (25)(25 分)

    A graph which is connected and acyclic can be considered a tree. The height of the tree depends on the selected root. Now you are supposed to find the root that results in a highest tree. Such a root is called the deepest root.

    Input Specification:

    Each input file contains one test case. For each case, the first line contains a positive integer N (<=10000) which is the number of nodes, and hence the nodes are numbered from 1 to N. Then N-1 lines follow, each describes an edge by given the two adjacent nodes' numbers.

    Output Specification:

    For each test case, print each of the deepest roots in a line. If such a root is not unique, print them in increasing order of their numbers. In case that the given graph is not a tree, print "Error: K components" where K is the number of connected components in the graph.

    Sample Input 1:

    5
    1 2
    1 3
    1 4
    2 5

    Sample Output 1:

    3
    4
    5

    Sample Input 2:

    5
    1 3
    1 4
    2 5
    3 4

    Sample Output 2:

    Error: 2 components
    最后一题 A得很开心

    去吃饭啦

    /**********************
    author: yomi
    date: 18.8.20
    ps:
    **********************/
    #include <iostream>
    #include <vector>
    #include <cstring>
    using namespace std;
    const int maxn = 10010;
    
    vector<int>g[maxn];
    bool vis[maxn];
    int ans[maxn];
    int depth = 1, n, now;
    void dfs(int index)
    {
        if(vis[index] == true)
            return;
        vis[index] = true;
        for(int i=0; i<g[index].size(); i++){
            if(!vis[g[index][i]]){
                depth++;
                ans[now] = max(ans[now], depth);
                dfs(g[index][i]);
                depth--;
            }
        }
    }
    
    int main()
    {
        int u, v, cnt=1;
        memset(ans, 0, sizeof(ans));
        memset(vis, 0, sizeof(vis));
        cin >> n;
        for(int i=0; i<n-1; i++){
            cin >> u >> v;
            g[u].push_back(v);
            g[v].push_back(u);
        }
        for(int i=1; i<=n; i++){
    
            if(!vis[i]){
                dfs(i);
                cnt++;
            }
        }
        if(cnt-1>1){
            cout << "Error: " << cnt-1 << " components";
        }
        else{
            for(int i=1; i<=n; i++){
                memset(vis, 0, sizeof(vis));
                now = i;
                dfs(i);
            }
            int Max = 0;
            for(int i=1; i<=n; i++){
                Max = max(Max, ans[i]);
            }
            for(int i=1; i<=n; i++){
                if(Max == ans[i])
                    cout << i << endl;
            }
        }
    
        return 0;
    }
    /**
    Sample Input 1:
    5
    1 2
    1 3
    1 4
    2 5
    Sample Output 1:
    3
    4
    5
    Sample Input 2:
    5
    1 3
    1 4
    2 5
    3 4
    Sample Output 2:
    Error: 2 components
    **/
  • 相关阅读:
    表单控件和属性
    html5语义化标签
    移动布局
    webpack
    OMobile
    Npm的下载 安装 管理工具
    模块化开发
    百度地图
    离线缓存
    canvas和svg
  • 原文地址:https://www.cnblogs.com/AbsolutelyPerfect/p/9506318.html
Copyright © 2020-2023  润新知