社区讨论

P3884 WA#1 求助

学术版参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@lo1vfl1x
此快照首次捕获于
2023/10/23 03:38
2 年前
此快照最后确认于
2023/11/03 04:07
2 年前
查看原帖
错误信息显示二叉树宽度输出错误。
CPP
#include<bits/stdc++.h>
using namespace std;
struct data{int d,l,r;}w[100];
int n,x,y,a[101][101],s[101],ans1,ans2;
void deep(int k,int f)//求深度 
{ 
  if(w[k].l) deep(w[k].l,f+1);
  if(w[k].r) deep(w[k].r,f+1);
  ans1=max(ans1,f);
  return;
}
int main()
{
  memset(a,0x3f,sizeof(a));
  cin>>n;
  w[1].d=1;
  for(int i=1;i<n;i++)
  {
    cin>>x>>y;
    a[x][y]=1;
    a[y][x]=2;
    w[y].d=w[x].d+1;//宽度为这个点的父亲的深度+1 
    if(w[x].l==0) w[x].l=y;//记录一下两个节点 
    else w[x].r=y;
  }
  deep(1,1); 
  for(int i=1;i<=n;i++) s[w[i].d]++;//统计这个深度有几个节点 
  for(int i=1;i<=n;i++) ans2=max(ans2,s[i]);
  for(int k=1;k<=n;k++)
    for(int i=1;i<=n;i++)
      for(int j=1;j<=n;j++)
        a[i][j]=min(a[i][j],a[i][k]+a[k][j]);//Floyd 
  cin>>x>>y;
  cout<<ans1<<endl<<ans2<<endl<<a[x][y];
  return 0;
}

回复

1 条回复,欢迎继续交流。

正在加载回复...