一段时间之前写的代码,想知道是什么地方出错了,还恳请大家帮忙。
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
int n,u,v;
vector<int>G[N];
int A,B,far;
int d[N],f[N];
bool vis[N];
//diameter
void dfs(int u,int fa){
f[u]=fa;
if(d[u]>d[far])far=u;
for(int i=0;i<G[u].size();i++){
int v=G[u][i];
if(v==fa)continue;
d[v]=d[u]+1;
dfs(v,u);
}
}
//diameter
//LCA
int d2[N],anc[N][30];
void init(){
for(int j=1;j<=20;j++){
for(int i=1;i<=n;i++){
anc[i][j]=anc[anc[i][j-1]][j-1];
}
}
}
void dfs2(int u,int fa){
for(int i=0;i<G[u].size();i++){
int v=G[u][i];
if(v==fa)continue;
d2[v]=d2[u]+1;
anc[v][0]=u;
dfs2(v,u);
}
}
int lca(int u,int v){
if(d2[u]<d2[v])swap(u,v);
for(int i=20;i>=0;i--){
if(d2[anc[u][i]]>=d2[v]){
u=anc[u][i];
}
}
if(u==v)return u;
for(int i=20;i>=0;i--){
if(anc[u][i]!=anc[v][i]){
u=anc[u][i];
v=anc[v][i];
}
}
return anc[u][0];
}
//LCA
int deg[N];
struct node{
int a,b;
}ans[N];
int tot;
int main(){
cin>>n;
for(int i=1;i<n;i++){
cin>>u>>v;
G[u].push_back(v);
G[v].push_back(u);
deg[u]++;deg[v]++;
}
dfs(1,0);A=far;
memset(f,0,sizeof(f));
dfs(A,0);B=far;
int cal=0;
for(int i=B;i;i=f[i]){
vis[i]=1;//point on diameter
cal++;
}
cal--;
int res=(1+cal)*cal/2;
d2[1]=1;
dfs2(1,0);
init();
// cout<<lca(4,5);
int dA=d2[A],dB=d2[B];
// cout<<A<<' '<<B<<"\n"<<dA<<' '<<dB;
for(int i=1;i<=n;i++){
if(deg[i]!=1)continue;
if(vis[i])continue;
int fa1=lca(i,A);
int fa2=lca(i,B);
// cout<<fa1<<" "<<fa2<<"\n";
// cout<<d[i]<<" "<<dA<<" "<<dB<<"\n";
int w1=d2[i]+dA-2*d2[fa1];
int w2=d2[i]+dB-2*d2[fa2];
if(w1>w2){res+=w1;ans[++tot].a=A;}
else{res+=w2;ans[++tot].a=B;}
ans[tot].b=i;
deg[i]=0;
}
cout<<res<<"\n";
for(int i=1;i<=tot;i++){
cout<<ans[i].a<<" "<<ans[i].b<<" "<<ans[i].b<<"\n";
}
for(int i=B;i;i=f[i]){
if(i==A)break;
cout<<A<<" "<<i<<" "<<i<<"\n";
}
return 0;
}
玄关+生祝,如果可以帮我调好的话,可以留下您的生日,然后我会在您生日那天来帖子底下@您并祝您生日快乐