• Codeforces 116C


    n个人,每个人之多有一个上司。“上司”关系具有传递性。求最少将人分成多少组,每组中的每个人的上司或者间接上司都不在该组。拿到题就用树的直径wa了一炮。。。

    正解是有向无环森林的最长路。从每个跟节点dfs,找最长的路就行了。

    #include<algorithm>
    #include<iostream>
    #include<cstring>
    #include<fstream>
    #include<sstream>
    #include<cstdlib>
    #include<vector>
    #include<string>
    #include<cstdio>
    #include<bitset>
    #include<queue>
    #include<stack>
    #include<cmath>
    #include<map>
    #include<set>
    #define FF(i, a, b) for(int i=a; i<b; i++)
    #define FD(i, a, b) for(int i=a; i>=b; i--)
    #define REP(i, n) for(int i=0; i<n; i++)
    #define CLR(a, b) memset(a, b, sizeof(a))
    #define debug puts("**debug**")
    #define LL long long
    #define PB push_back
    #define MP make_pair
    using namespace std;
    
    const int maxn = 2222;
    int n, x, fa, len, t, vis[maxn];
    vector<int> G[maxn];
    
    void dfs(int u, int fa, int now)
    {
        len = max(len, now);
        REP(i, G[u].size())
        {
            int v = G[u][i];
            if(v != fa) dfs(v, u, now+1);
        }
    }
    
    int main()
    {
        scanf("%d", &n);
        x = -1;
        FF(i, 1, n+1)
        {
            scanf("%d", &fa);
            if(fa != -1)
            {
                x = fa;
                G[fa].PB(i);
            }
            else vis[i] = 1;
        }
        int ans = 1;
        FF(i, 1, n+1) if(vis[i])
        {
            len = 0;
            dfs(i, -1, 0);
            ans = max(ans, len + 1);
        }
        printf("%d
    ", ans);
        return 0;
    }
    


  • 相关阅读:
    eventlet设计模式
    backbone Model调用save方法的时候提交方式
    django form POST方法提交表达
    wordpress简单搭建个人博客
    docker-py环境配置
    EditPlus安装与注册
    xmind安装和升级
    统计学习的相关定义
    LaTeX初识
    flask_mail发送邮件
  • 原文地址:https://www.cnblogs.com/riasky/p/3373612.html
Copyright © 2020-2023  润新知