思路。
我们知道最初添加的液体越多,那么每个蚂蚁得到的液体也就越多,又因为标签里有深搜,所以可以用 DFS+二分解决(感觉说了一通废话),算是比较常规的一种解法了。
在此题中我们需要魔改一下建树,需在其中添加判断此边是否为超级管道和处理通过液体的百分比这两段代码。
DFS 和二分的代码是最重要的,但也是最简单的。
温馨提示:此题的码量有点逆天,根本不像正常的 DFS + 二分的题的码量,所以就不放完整代码了,也请各位注意。
其他就没什么了。
核心 DFS + 二分代码。
cpp
void dfs(int x,int f) {
for(int i=tou[x]; i; i=ed[i].nxt) {
int y=ed[i].to;
double res=0;
if(y==f){
continue;
}
res=ll[x]*ed[i].w;
if(ed[i].opt){
res*=res;
}
ll[y]+=res;
dfs(y,x);
}
}
bool zhao(double mid) {
for(int i=1; i<=n;i++){
ll[i]=0;
}
ll[1]=mid;
dfs(1,0);
for(int i=1; i<=n;i++){
if(ll[i]<k[i]){
return 0;
}
}
return 1;
}