20求调,悬关
查看原帖
20求调,悬关
1112575
with_my_moon楼主2024/11/8 22:42
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <math.h>
#include <string.h>
#include <queue>
#include <stack>
#include <vector>
using namespace std;

#define maxn 310 

int n,m;
int dp[maxn][maxn];//id and the number of class I have chosen

vector<int>t[maxn];

void eml(int id){
	for(int i=0;i<t[id].size();i++){
		int u=t[id][i];
		if((int)t[u].size()!=0){
			eml(u);
		}
		for(int j=m;j>=2;j--){
			for(int k=1;k<=j;k++){
				dp[id][j]=max(dp[id][j],dp[id][j-k]+dp[u][k]);
				//cout<<"id:"<<endl;cout<<id<<" "<<dp[id][j+1]<<endl;
			}
		}	
	}
	return;	
}

int main(){
	memset(dp,0,sizeof(dp));
	cin>>n>>m; 
	++m;
	dp[0][1]=0;
	for(int i=1;i<=n;++i){
		int ff,tt;
		cin>>ff>>dp[i][1];
		t[ff].push_back(i);
	}
	//for(int i=0;i<=n;i++) cout<<t[i].size()<<" ";cout<<endl;
	eml(0);
	cout<<dp[0][m];
	return 0;
}
2024/11/8 22:42
加载中...