1 solutions

  • 0
    @ 2025-11-27 11:59:57

    C++ :

    #include <iostream>
    #include <cstdio>
    using namespace std;
    const int N=1e5+10,inf=1e9+10;
    int n,to[2*N],nxt[2*N],ver[N],c[N],idx,ans,dp[N][2];
    void add(int x,int y){
        to[++idx]=y,nxt[idx]=ver[x],ver[x]=idx;
    }
    void dfs(int x,int fa){
        dp[x][0]=dp[x][1]=-inf;
        dp[x][c[x]]=0;
        for(int i=ver[x];i;i=nxt[i]){
            if(to[i]==fa)continue;
            int y=to[i];dfs(y,x);
            ans=max(ans,max(dp[x][1]+dp[y][0],dp[x][0]+dp[y][1])+1);
            dp[x][0]=max(dp[x][0],dp[y][0]+1);
            dp[x][1]=max(dp[x][1],dp[y][1]+1);
        }
        return;
    }
    int main(){
        scanf("%d",&n);
        for(int i=1;i<=n;i++)scanf("%d",c+i);
        for(int i=1,u,v;i<n;i++){
            scanf("%d %d",&u,&v);
            add(u,v),add(v,u);
        }
        dfs(1,0);
        printf("%d\n",ans);
        return 0;
    }
    
    

    Information

    ID
    149
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By