请求加强数据
查看原帖
请求加强数据
617860
great_mind楼主2022/2/16 10:41
#include<bits/stdc++.h>
using namespace std;
int n,m,w,f[20005],uu[20005],vv[20005],cnt,dp[20005];
struct buy{
	int c,d;
}a[20005];
int ys(int u){
	if(u==f[u]){
		return u;
	}else{
		return f[u]=ys(f[u]);
	}
}
int main(){
	scanf("%d%d%d",&n,&m,&w);
	for(int i=1;i<=n;i++){
		scanf("%d%d",&a[i].c,&a[i].d);
		f[i]=i;
	}
	for(int i=1,u,v;i<=m;i++){
		scanf("%d%d",&u,&v);
		a[ys(u)].c+=a[ys(v)].c;
		a[ys(u)].d+=a[ys(v)].d;
		f[ys(v)]=ys(u);
	}
	for(int i=1;i<=n;i++){
		if(f[i]==i){
			uu[++cnt]=a[i].c;
			vv[cnt]=a[i].d;
		}
	}
	for(int i=1;i<=cnt;i++){
		for(int j=w;j>=uu[i];j--){
			dp[j]=max(dp[j],dp[j-uu[i]]+vv[i]);
		}
	}
	printf("%d",dp[w]);
	return 0;
}

这份代码是错误的,因为在23行没特判

4 3 10
3 10
3 10
3 10
10 1
1 3
3 2
1 2
//数据来源acwing

答案:

30

我去年就被误导了

2022/2/16 10:41
加载中...