大连科技官方网站,txt免费全本电子书软件下载网站,2021可以访问黄的浏览器,html网页制作用什么语言【题意】 给出一棵树。现在可以在树中删去m条边#xff0c;使它变成m1棵树。要求最小化树的直径的最大值。 【题解】 二分答案。$Check$的时候用$DP$#xff0c;记录当前节点每个儿子的直径$v[i]$#xff0c;如果$v[i]1mid$#xff0c;那么就断掉连向儿子的这条边。如果… 【题意】 给出一棵树。现在可以在树中删去m条边使它变成m1棵树。要求最小化树的直径的最大值。 【题解】 二分答案。$Check$的时候用$DP$记录当前节点每个儿子的直径$v[i]$如果$v[i]1mid$那么就断掉连向儿子的这条边。如果$v[i]v[j]2mid$那么在i与j中选择一个$v%值较大的断掉。 #includecstdio
#includealgorithm
#define N 200010
#define rg register
using namespace std;
int n,m,tot,ans,cut,last[N],mid,f[N],a[N];
struct edge{int to,pre;
}e[N];
inline int read(){int k0,f1; char cgetchar();while(c0||c9)c-(f-1),cgetchar();while(0cc9)kk*10c-0,cgetchar();return k*f;
}
inline void add(int x,int y){e[tot](edge){y,last[x]};last[x]tot;
}
void dfs(int x,int fa){f[x]0;for(rg int ilast[x],to;i;ie[i].pre)if((toe[i].to)!fa) dfs(to,x);int cnt0;for(rg int ilast[x],to;i;ie[i].pre)if((toe[i].to)!fa) a[cnt]f[to]1;sort(a1,acnt1);while(a[cnt]a[cnt-1]mid) cut,cnt--;f[x]a[cnt];
}
bool check(){cut0;dfs(1,0);//printf(mid%d cut%d\n,mid,cut);if(cutm) return 1;return 0;
}
int main(){nread(); mread();for(rg int i1,u,v;in;i){uread(); vread();add(u,v); add(v,u);}int l0,rn-1;while(lr){mid(lr)1;if(check()) rmid;else lmid1;}printf(%d\n,l);return 0;
}转载于:https://www.cnblogs.com/DriverLao/p/8516340.html