zoukankan      html  css  js  c++  java
  • 【CCF】网络延时 树搜索

    #include<iostream>
    #include<cstdio>
    #include<string>
    #include<cstring>
    #include<algorithm>
    #include<vector>
    
    using namespace std;
    const int maxn=2e4+2;
    const int maxm=2e4+2;
    const int inf=0x3f3f3f3f;
    int n,m;
    struct edge{
        int to;
        int nxt;
    }e[2*maxm];
    int len[maxn][2];
    bool vis[maxn];
    int tot;
    int head[maxn];
    int ans=-inf;
    void init(){
        memset(head,-1,sizeof(head));
        tot=0;
        memset(len,0,sizeof(len));
        memset(vis,false,sizeof(vis));
    }
    void add(int u,int v){
        e[tot].to=v;
        e[tot].nxt=head[u];
        head[u]=tot++;
    }
    void dfs(int u){
        vis[u]=true;
        vector<int> vec;
        for(int i=head[u];i!=-1;i=e[i].nxt){
            int v=e[i].to;
            if(vis[v]) continue;
            dfs(v);
            int tmp=len[v][0]+1;
            vec.push_back(tmp);
        }
        int sz=vec.size();
        if(sz==0){
            len[u][0]=len[u][1]=0;
        }else if(sz==1){
            len[u][0]=vec[0];
            len[u][1]=0;
        }else{
            int pos1=-1,pos2=-1;
            for(int i=0;i<sz;i++){
                if(vec[i]>len[u][0]){
                    len[u][0]=vec[i];
                    pos1=i;
                }    
            }
            for(int i=0;i<sz;i++){
                if(i==pos1) continue;
                if(vec[i]>len[u][1]){
                    len[u][1]=vec[i];
                }
            }
            ans=max(ans,len[u][0]+len[u][1]);
        }
    }
    int work(){
        dfs(1);
        return ans;
    }
    int main(){
        while(~scanf("%d%d",&n,&m)){
            init();
            int x;
            for(int i=2;i<=n;i++){
                scanf("%d",&x);
                add(i,x);
                add(x,i);
            }
            for(int i=1;i<=m;i++){
                scanf("%d",&x);
                add(n+i,x);
                add(x,n+i);
            }
            int ans=work();
            printf("%d
    ",ans);
        }
        return 0;
    } 
  • 相关阅读:
    NOIP2018 游记
    HDU1556 敌兵布阵
    BZOJ 1032 [JSOI2007]祖码Zuma
    BZOJ 1068 [SCOI2007]压缩
    BZOJ 1090 [SCOI2003]字符串折叠
    BZOJ 1260 [CQOI2007]涂色paint
    BZOJ 1055 [HAOI2008]玩具取名
    HDU 5151 Sit sit sit
    HDU 4283 You Are the One
    vue系列8:webpack
  • 原文地址:https://www.cnblogs.com/itcsl/p/9192964.html
Copyright © 2011-2022 走看看