求助,你谷AC,站外RE
查看原帖
求助,你谷AC,站外RE
189394
黑客楼主2020/11/15 20:39
#include<bits/stdc++.h>
using namespace std;
#define N 50010
int n,m,maxn=0,ans=0,lim,val[N],h[N],cnt=0;
multiset<int>::iterator it,tmp;
int gi(){
	int w=0,f=1;char ch;
	while(!isdigit(ch)){f=ch=='-'?-1:1;ch=getchar();}
	while(isdigit(ch)){w=(w<<1)+(w<<3)+ch-48;ch=getchar();}
	return w*f;
}
struct edge{
	int v,w,nxt;
}e[N<<1];
void add(int u,int v,int w){
	e[++cnt]=(edge){v,w,h[u]};
	h[u]=cnt;
}
void dfs(int x,int fx,int w){
	multiset<int>s;
	s.clear();
	val[x]=w;
	for(int i=h[x];i;i=e[i].nxt){
		if(e[i].v!=fx){
			dfs(e[i].v,x,e[i].w);
			if(val[e[i].v]>=lim)ans++;
			else s.insert(val[e[i].v]);
		}
	}
	int Max=0;
	while(!s.empty()){
		it=s.begin();
		s.erase(it);
		tmp=s.lower_bound(lim-(*it));
		if(tmp!=s.end()){
			ans++;
			s.erase(tmp);
		}
		else Max=max(Max,*it);
	} 
	val[x]+=Max;
}
bool check(int x){
	ans=0;lim=x;
	dfs(1,0,0);
	if(ans>=m)return 1;
	else return 0;
}
int main(){
	n=gi();m=gi();
	for(int i=1;i<n;i++){
		int u=gi(),v=gi(),w=gi();
		add(u,v,w);
		add(v,u,w);
		maxn+=w;
	}
	int l=1,r=maxn;
	while(l<r){ 
		int mid=(l+r+1)>>1;
		if(check(mid))l=mid;
		else r=mid-1;
	}
	cout<<l<<"\n";
}

这种写法为什么会RE?

调了半天,真找不出来错误,救救蒟蒻吧。。。

2020/11/15 20:39
加载中...