求助,为什么 60 分。
查看原帖
求助,为什么 60 分。
731650
_zuoqingyuan楼主2024/5/3 21:06
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
const int N=1e5+10,M=1e6+10;
vector<int>v[N],g[M];
int n,x,y,de[M],cnt,len[N],maxn=-1e9,pos,ans,tp,tot,a[N],b[N],maxde;
void dfs(int x,int fa){
    de[x]=de[fa]+1;
    if(de[x]>maxde)maxde=de[x],pos=x;
    for(auto y:g[x])if(y!=fa)dfs(y,x);
}
int main(){
    scanf("%d",&n);de[0]=-1;
    for(int i=1,sum,f;i<=n;i++){
        scanf("%d",&sum);
        v[i].push_back(0);
        v[i].push_back(sum);
        for(int j=2;j<=sum;j++){
            scanf("%d",&f);
            v[i].push_back(f);
        }
    }
    scanf("%d %d",&x,&y);
    for(int i=1;i<=n;i++){
        int m=v[i][1];
        for(int j=2;j<=m;j++){
            g[j].push_back(v[i][j]);
            g[v[i][j]].push_back(j);
        }
        if(i==1){
            maxde=0,dfs(1,0),ans+=de[x],a[1]=de[x];
            maxde=0,dfs(x,0),b[1]=maxde;
        }else if(i==2){
            maxde=0,dfs(1,0),ans+=de[y],a[2]=de[y];
            maxde=0,dfs(y,0),b[2]=maxde;
        }else{
            maxde=0,dfs(1,0),ans+=maxde,a[i]=maxde;
            maxde=0,dfs(pos,0),b[i]=maxde;
        }
        for(int j=1;j<=m;j++)g[j].clear(),de[j]=0;
    }
    for(int i=1;i<=n;i++)maxn=max(maxn,b[i]-a[i]);
    printf("%d\n",maxn+ans+n-1);
    return 0;
}

第 1212 个点答案错误,为什么?求大佬解答

2024/5/3 21:06
加载中...