acgo题库
  • 首页
  • 题库
  • 学习
  • 竞赛
  • 讨论
  • 排行
  • 团队
  • 备赛专区

    竞赛

    • CSP-J/S
    • 蓝桥杯

    考级

    • GESP
    • CPA
    • 电子学会考级
登录
注册
题目详情提交记录(0)
  • 6

    #include <iostream> #include <algorithm> #include <cstdio> #include <cstring> using namespace std; const int N=2e5+15; int col[N]; int e[N],ne[N],h[N],idx,w[N]; int f[N],g[N],mxl; int n; int dfn[N],timestamp; void add_in(int x,int y,int z){ e[idx]=y; ne[idx]=h[x]; w[idx]=z; h[x]=idx; } void dfs(int u,int fa){ //树的直径 dfn[u]=timestamp; //记录一下访问了该节点 int v; f[u]=0; for(int i=h[u];i;i=ne[i]){ v=e[i]; if(v==fa) continue; dfs(v,u); mxl=max(mxl,f[u]+f[v]+w[i]); f[u]=max(f[u],f[v]+w[i]); } } int main(){ cin>>n; for(int i=1;i<=n;i){ cin>>col[i]; } int x,y; for(int i=1;i<n;i){ cin>>x>>y; if(col[x]==col[y]) continue; //两点颜色相同则不用建边 add_in(x,y,1); add_in(y,x,1); } int res=0; for(int i=1;i<=n;i++){ if(!dfn[i]) //该节点未被访问过 dfs(i,0); } cout<<mxl+1<<endl; //因为树的直径计算的是经过边的条数,因此需+1 return 0; }

    userId_undefined

    ༺ཌༀ凌驾于你之上ༀད༻

    时空双修者题解仙人数组·数组操作员快乐小狗秩序白银字符串·魔法使
    1阅读
    0回复
    1点赞
暂无数据

提交答案之后,这里将显示提交结果~

首页