1 solutions
-
0
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