48分 良好马蜂求调
查看原帖
48分 良好马蜂求调
823137
lcx2011楼主2024/7/24 15:10
#include <bits/stdc++.h>
using namespace std;
int n,p,zi[300],ans;
vector<int> g[200];
int qz(int num){
	int sum=0;
	for(int i=0;i<g[num].size();i++){
		sum+=qz(g[num][i]);
	}
	return zi[num]+=sum;
}
struct youbiyaoma{
	int bh;
	int rz;
}fir[200];
bool cmp(youbiyaoma x,youbiyaoma y){
	return x.rz<y.rz;
}
queue<int> q;int cnt,bian[200];
void sou(){
	q.push(1);
	while(!q.empty()){
		int k=q.front();
		q.pop();
		cnt=0;
		if(zi[k]<=p){
			ans++;
			p-=zi[k];
			//cout<<k;
			if(p==0) return ;
		}
		else if(zi[k]>p){
			for(int i=0;i<g[k].size();i++){
				fir[++cnt].rz=zi[g[k][i]];
				fir[cnt].bh=g[k][i];
				//cout<<fir[1];
			}
			sort(fir+1,fir+cnt+1,cmp);
			for(int i=cnt;i>=1;i--){
				q.push(fir[i].bh);
			}
		}
	}
}
int main(){
	cin>>n>>p;
	p=n-p;
	for(int i=1;i<n;i++){
		int fa,ch;
		zi[i]=1;
		cin>>fa>>ch;
		g[fa].push_back(ch);
	}
	zi[n]=1;
	qz(1);
	sou();
	cout<<ans;
	return 0;
}

2024/7/24 15:10
加载中...