P6058 [加油武汉]体温调查
written on 2022-05-23
两次二分,第一次二分内层套一个
如果是一次二分,内层带一个有求lca的
而且那样还有WA的,然而我对拍全过!
刷基础题,心态要刷没了。。
好了言归正传,这题的关键其实在于发现题目中隐含的最大值最小这个言外之意,这样就能够想到二分的做法了,当然两次二分,第二次二分中的
#include<bits/stdc++.h>
#define N 200005
using namespace std;
typedef long long ll;
int n,k;
int tot,ver[N<<1],nxt[N<<1],head[N];
ll edge[N<<1];
void add_E(int x,int y,ll z){ver[++tot]=y,edge[tot]=z,nxt[tot]=head[x],head[x]=tot;}
int f[N][20],dep[N];
ll dis[N],s[N];
int m,leaf[N];
void dfs(int x)
{
for(int i=1;i<=19;i++) f[x][i]=f[f[x][i-1]][i-1];
bool flag=0;
for(int i=head[x];i;i=nxt[i])
{
int y=ver[i];
ll z=edge[i];
if(y==f[x][0]) continue;
flag=1;
f[y][0]=x;
dis[y]=dis[x]+z,dep[y]=dep[x]+1;
dfs(y);
}
if(!flag) leaf[++m]=x;
}
int lca(int x,int y)
{
if(dep[x]<dep[y]) swap(x,y);
for(int i=19;i>=0;i--) if(dep[f[x][i]]>=dep[y]) x=f[x][i];
if(x==y) return x;
for(int i=19;i>=0;i--) if(f[x][i]!=f[y][i]) x=f[x][i],y=f[y][i];
return f[x][0];
}
ll D(int x,int y){return dis[x]+dis[y]-2*dis[lca(x,y)];}
bool check(ll w)
{
int x=1;
for(int i=1;i<=k;i++)
{
int l=x,r=m,res=-1;
while(l<=r)
{
int mid=l+r>>1;
if(s[mid]-s[x]+dis[leaf[x]]+dis[leaf[mid]]<=w) res=mid,l=mid+1;
else r=mid-1;
}
if(res==-1) return 0;
x=res+1;
if(x>m) return 1;
}
return 0;/*
int x=1,cnt=0;
while(x<=m)
{
cnt++;
int i=x;
ll now=dis[leaf[x]];
if(now*2<=mid) while(i<m)
{
now+=D(leaf[i],leaf[i+1]);
if(now+dis[leaf[i+1]]>mid) break;
i++;
}
x=i+1;
}
return cnt<=k;*/
}
int main()
{
// freopen("1.in","r",stdin);
// freopen("1.ans","w",stdout);
scanf("%d%d",&n,&k);
for(int i=1;i<n;i++)
{
int x,y;
ll z;
scanf("%d%d%lld",&x,&y,&z);
add_E(x,y,z),add_E(y,x,z);
}
dep[1]=1,dfs(1);
// reverse(leaf+1,leaf+1+m);
s[1]=0;
for(int i=2;i<=m;i++) s[i]=s[i-1]+D(leaf[i-1],leaf[i]);
ll l=0,r=1e18,ans=0;
while(l<=r)
{
ll mid=l+r>>1;
if(check(mid)) r=mid-1,ans=mid;
else l=mid+1;
}
printf("%lld\n",ans);
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!