刚觉问题挺玄学的,找不到dfs函数的问题,还请dalao帮忙检查一下
第一次dfs是这样写的->
void dfs(int u,int f){
for(auto i:mst[u]){
int v=i.first,w=i.second;
if(v==f) continue;
dis[v]=dis[u]+1;
fa[v][0]=u;
maxw[v][0]=w;
secw[v][0]=0;
for(int i=1;i<=20;i++){
fa[v][i]=fa[fa[v][i-1]][i-1];
maxw[v][i]=max(maxw[v][i-1],maxw[fa[v][i-1]][i-1]);
secw[v][i]=max(secw[v][i-1],secw[fa[v][i-1]][i-1]);
if(maxw[v][i-1]>maxw[fa[v][i-1]][i-1]){
secw[v][i]=max(secw[v][i],maxw[fa[v][i-1]][i-1]);
}
else if(maxw[v][i-1]<maxw[fa[v][i-1]][i-1]){
secw[v][i]=max(secw[v][i],maxw[v][i-1]);
}
dfs(v,u);
}
}
}
TEL#5~#13,去求助一下隔壁dalao,dalao把代码改成这样->
void dfs(int u,int f){
for(auto i:mst[u]){
int v=i.first,w=i.second;
if(v==f) continue;
dis[v]=dis[u]+1;
fa[v][0]=u;
maxw[v][0]=w;
secw[v][0]=0;
for(int i=1;i<=20;i++){
fa[v][i]=fa[fa[v][i-1]][i-1];
maxw[v][i]=max(maxw[v][i-1],maxw[fa[v][i-1]][i-1]);
secw[v][i]=max(secw[v][i-1],secw[fa[v][i-1]][i-1]);
if(maxw[v][i-1]>maxw[fa[v][i-1]][i-1]){
secw[v][i]=max(secw[v][i],maxw[fa[v][i-1]][i-1]);
}
else if(maxw[v][i-1]<maxw[fa[v][i-1]][i-1]){
secw[v][i]=max(secw[v][i],maxw[v][i-1]);
}
}
dfs(v,u);
}
}
AC
但我不知道问题在哪里,还请评论区dalao帮助