用的并查集加01背包解,一直mle求助!
  • 板块P1455 搭配购买
  • 楼主Merc
  • 当前回复4
  • 已保存回复4
  • 发布时间2022/4/8 14:06
  • 上次更新2023/10/28 04:18:10
查看原帖
用的并查集加01背包解,一直mle求助!
158594
Merc楼主2022/4/8 14:06
#include<cstdio>

int c[10001],n,m,w,d[10001],f[10001],u,v,dp[10005];

int find(int k){
	if(k==f[k]) return k;
	return f[k]=find(k);
}

int main(){
	scanf("%d%d%d",&n,&m,&w);
	for(int i=1;i<=n;i++){
		f[i]=i;
		scanf("%d%d",&c[i],&d[i]);
	}
	for(int i=1;i<=m;i++){
		scanf("%d%d",&u,&v);
		f[find(u)]=find(v);
	}
	for(int i=1;i<=n;i++){
		if(f[i]==i) continue;
		c[f[i]]+=c[i];
		c[i]=0;
		d[f[i]]+=d[i];
		d[i]=0;
	}
	for(int i=1;i<=n;i++){
		for(int j=w;j>=c[i];j--){
			if(dp[j-c[i]]+d[i]>dp[j])
			dp[j]=dp[j-c[i]]+d[i];
		}
	}
	printf("%d",dp[w]);
	return 0;
}

过了两个点,但是其他点都是MLE,可是我感觉这点数组空间应该是够的,不知道mle的其他原因了。求助!!

2022/4/8 14:06
加载中...