标签:tar lap otto turn desc ice nta gif ini
Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)
Total Submission(s): 3205 Accepted Submission(s): 1137
#include<iostream> #include<cstdio> #include<cmath> #include<cstring> #include<algorithm> #include<queue> #include<stack> #include<map> #include<stack> #include<set> #include<bitset> using namespace std; #define PI acos(-1.0) #define eps 1e-8 #define min(a,b) (a)<(b)?(a):(b) #define max(a,b) (a)>(b)?(a):(b) #define abs(a) (a)<0?-(a):(a) typedef long long ll; typedef pair<int,int > P; const int N=2e5+100,M=2e6+100; const int inf=0x3f3f3f3f; const ll INF=1e18+7,mod=1e9+7; struct edge { int from,to; ll w; int next; }; edge es[M]; int cnt,head[N]; ll dp[N]; void init() { cnt=0; memset(head,-1,sizeof(head)); } void addedge(int u,int v,ll w) { cnt++; es[cnt].from=u,es[cnt].to=v; es[cnt].w=w; es[cnt].next=head[u]; head[u]=cnt; } void dfs(int u,int fa,ll mid) { dp[u]=0LL; int child=0; for(int i=head[u]; i!=-1; i=es[i].next) { edge e=es[i]; if(e.to==fa) continue; child++; dfs(e.to,u,mid); if(e.w>mid) dp[u]+=dp[e.to]; else dp[u]+=min(dp[e.to],e.w); } if(!child) dp[u]=inf; } int main() { int n; ll m; while(~scanf("%d%lld",&n,&m)) { if(n==0&&m==0) break; init(); ll l=inf,r=-inf; for(int i=1; i<n; i++) { int u,v; ll w; scanf("%d%d%lld",&u,&v,&w); l=min(l,w),r=max(r,w); addedge(u,v,w); addedge(v,u,w); } ll ans=0; while(l<=r) { ll mid=(l+r)>>1; dfs(1,0,mid); if(dp[1]<=m) r=mid-1,ans=mid; else l=mid+1; } if(ans) printf("%d\n",ans); else printf("-1\n"); } return 0; }
HDU 3586.Information Disturbing 树形dp
标签:tar lap otto turn desc ice nta gif ini
原文地址:http://www.cnblogs.com/GeekZRF/p/7615607.html