社区讨论
0pts求条
P2014[CTSC1997] 选课参与者 3已保存回复 4
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @mhj3dkpq
- 此快照首次捕获于
- 2025/11/03 20:03 4 个月前
- 此快照最后确认于
- 2025/11/03 20:03 4 个月前
CPP
// Gavinzhou's code
#include<bits/stdc++.h>
using namespace std;
//#define nottest
#define in freopen("xx.in","r",stdin)
#define out freopen("xx.out","w",stdout)
#define int long long
#define Abs(x) ((x)<0?-(x):(x))
#define Max(a, b) ((a)>(b)?(a):(b))
#define Min(a, b) ((a)<(b)?(a):(b))
#define fir first
#define sec second
using intint=pair<int,int>;
using str=string;
const int N=3e5;
//变量函数区
int n,m;
int a[306];
vector<int>g[406];
int f[305][305];
int size[305];
void dfs(int x){
size[x]=1;
for(int i:g[x]){
dfs(i);
size[x]+=size[i];
}
}
void dfs1(int x){
for(int i:g[x]){
dfs1(i);
for(int j=min(m,size[x]);j>=2;j--){
for(int k=1;k<j;k++){
f[x][j]=max(f[x][j-k]+f[i][k],f[x][j]);
}
//f[x][j]+=a[i];
}
}
f[x][1]=a[x];
}
//结束
signed main(){
#ifdef nottest
in;
out;
#endif
//主函数区
cin>>n>>m;
m++;
for(int i=1;i<=n;i++){
int s,k;
cin>>k>>s;
a[i]=s;
g[k].push_back(i);
}
//memset(f,-0x3f,sizeof(f));57行
f[0][0]=0;
dfs(0);
dfs1(0);
//cout<<size[0]<<endl;
cout<<f[0][m];
//结束
return 0;
}
把57行取消注释就输出一个极小值,怎么办
回复
共 4 条回复,欢迎继续交流。
正在加载回复...