10分,求助
查看原帖
10分,求助
1151923
lzsy0313楼主2024/7/15 21:43
#include <iostream>
#define N 10005
using namespace std;
int n,m,w,c[N],d[N],u[N],v[N]; //c价钱 d价值 
int fa[N],f[N]; //以i为价钱的最大价值;
void init(){
	for(int i=1;i<=n;i++){
		fa[i]=i;
	}
}
int find(int k){
	if(k==fa[k]) return k;
	return fa[k]=find(fa[k]);
}
int price(int k){
	int sum=0;
	for(int i=1;i<=n;i++){
		if(find(i)==k) sum+=c[i];
	}
	return sum;
}
int main(){
	cin >>n >>m >>w;
	for(int i=1;i<=n;i++){
		cin >>c[i] >>d[i];
	}
	init();
	for(int i=1;i<=m;i++){
		cin >>u[i] >>v[i];
		fa[find(u[i])]=find(v[i]);
	}
	for(int i=1;i<=n;i++){
		for(int j=w;j>=c[i];j--){
			if(price(find(c[i]))<j){
				f[j]=max(f[j],f[j-c[i]]+d[i]);
			}
		}
	} 
	
	int max_=0;
	for(int i=1;i<=w;i++){
		max_=max(max_,f[i]);
	}
	cout <<max_ <<endl;
	return 0;
}
2024/7/15 21:43
加载中...