70pats
查看原帖
70pats
483826
joker_zjd楼主2021/10/12 17:09
#include<bits/stdc++.h>
using namespace std;
int n,m,w,c[100000],f[5001],cc[100000],bb[100000],b[100000],F[100000],k[100000];
int Find(int FF){
	if(F[FF]==FF){
		return FF;
	}
	return F[FF]=Find(F[FF]);
}
int main(){
	cin>>n>>m>>w;
	for(int i=1;i<=n;i++){
		cin>>c[i]>>b[i];
		F[i]=i;
	}
	for(int i=1;i<=m;i++){
		int x,y;
		cin>>x>>y;
		if(x!=y)
		F[Find(x)]=Find(y);
	}
	for(int i=1;i<=n;i++){
		cc[Find(i)]+=c[i];
		bb[Find(i)]+=b[i];
	}
    for(int i=1;i<=n;i++){
    	for(int y=w;y>=cc[i];y--){
    		f[y]=max(f[y],f[y-cc[i]]+bb[i]);
		}
	}
	cout<<f[w];
}
2021/10/12 17:09
加载中...