zoukankan      html  css  js  c++  java
  • PAT (Advanced Level) 1021. Deepest Root (25)

    先并查集判断连通性,然后暴力每个点作为根节点判即可。

    #include<iostream>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    #include<cstdio>
    #include<queue>
    #include<vector>
    using namespace std;
    
    struct Edge
    {
        int a,b;
    }e[20000];
    int n,sz,f[20000],dep,U;
    bool flag[20000];
    vector<int>g[20000];
    
    int Find(int x)
    {
        if(x!=f[x]) return f[x]=Find(f[x]);
        return f[x];
    }
    
    void dfs(int x,int d)
    {
        dep=max(dep,d); flag[x]=1;
        for(int i=0;i<g[x].size();i++)
            if(flag[g[x][i]]==0) dfs(g[x][i],d+1);
    }
    
    void DFS(int x,int d)
    {
        U=max(U,d); flag[x]=1;
        for(int i=0;i<g[x].size();i++)
            if(flag[g[x][i]]==0) DFS(g[x][i],d+1);
    }
    
    int main()
    {
        scanf("%d",&n); sz=n;
        for(int i=1;i<=n;i++) {g[i].clear();f[i]=i;}
        for(int i=1;i<=n-1;i++)
        {
            scanf("%d%d",&e[i].a,&e[i].b);
            g[e[i].a].push_back(e[i].b);
            g[e[i].b].push_back(e[i].a);
        }
        for(int i=1;i<=n-1;i++)
        {
            int fx=Find(e[i].a), fy=Find(e[i].b);
            if(fx!=fy) { sz--; f[fx]=fy; }
        }
        if(sz!=1) printf("Error: %d components
    ",sz);
        else
        {
            dep=0;
            for(int i=1;i<=n;i++)
            {
                memset(flag,0,sizeof flag);
                dfs(i,1);
            }
    
            for(int i=1;i<=n;i++)
            {
                U=0;
                memset(flag,0,sizeof flag);
                DFS(i,1);
                if(U==dep) printf("%d
    ",i);
            }
        }
        return 0;
    }
  • 相关阅读:
    伪类和伪元素的区别, 总结的很好, 直接看结论.
    进制闲谈
    遇到的问题&思考
    PHP中include引用导致不能再次相对引用文件的一个小问题
    ECharts饼图试玩
    不该迷茫的时候迷茫
    [5]火车票接口整理
    [4]xlongwei工具类
    [3]天行新闻
    [2]新闻
  • 原文地址:https://www.cnblogs.com/zufezzt/p/5499810.html
Copyright © 2011-2022 走看看