关于吉吉王国的疑惑
求大佬解答,为什么我INF设为1e18的时候wa了,设为1e17的时候ac
代码如下:
#include<bits/stdc++.h>
#define all(x) x.begin(),x.end()
#define int long long
using namespace std;
const int N=1e3+5,INF=1e18,M=2e4+5;
int n,m,s; vector<pair<int,int>> e[N];
int f[N];
void dfs(int u,int fa,int limit)
{
int flag=0;
for(auto t: e[u])
{
int v=t.first,w=t.second;
if(v==fa) continue;
flag=1;
dfs(v,u,limit);
if(w<=limit)
f[u]+=min(f[v],w);
else
f[u]+=f[v];
}
int rear=(flag ? 0 : INF);
f[u]+=rear;
}
int check(int limit)
{
for(int i=1;i<=n;i++) f[i]=0;
dfs(1,0,limit);
if(f[1]>m) return 0;
else return 1;
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
cin>>n>>m;
for(int i=1;i<n;i++)
{
int u,v,w; cin>>u>>v>>w;
e[u].push_back(make_pair(v,w)); e[v].push_back(make_pair(u,w));
}
int l=0,r=1e5,ans=-1;
while(l<=r)
{
int mid=l+r>>1;
if(check(mid))
{
ans=mid;
r=mid-1;
}
else
{
l=mid+1;
}
}
cout<<ans;
return 0;
}