记录编号 242474 评测结果 AAAAAAAAAA
题目名称 搭配购买 最终得分 100
用户昵称 GravatarSky_miner 是否通过 通过
代码语言 C++ 运行时间 0.205 s
提交时间 2016-03-27 16:13:01 内存使用 0.44 MiB
显示代码纯文本
#include<cstdio>
using namespace std;
const int maxn = 10000 + 10 ;
int fa[maxn];
inline int find(int x){
	return fa[x] == x? x:fa[x] = find(fa[x]);
}
void read(int &x){
	x=0;char ch;bool flag = false;
	while( ch = getchar(),ch<'!' );
	if( ch == '-' ) ch=getchar(),flag=true;
	while( x=10*x+ch-'0',ch=getchar(),ch>'!' );
	if(flag) x=-x;
}
int w[maxn],val[maxn],f[maxn];
int cnt;
int main(){
	freopen("buy.in","r",stdin);
	freopen("buy.out","w",stdout);
	int n,T,V;read(n);read(T);read(V);
	for(int i=1;i<=n;i++){
		read(w[i]);read(val[i]);
		fa[i] = i;
	}
	int u,v,ru,rv;
	while(T--){
		read(u);read(v);
		ru=find(u);rv=find(v);
		fa[rv] = ru;
		w[ru]  += w[rv];
		val[ru]+= val[rv];
	}
	for(int i=1;i<=n;i++){
		if( fa[i] == i ){
			w[++cnt] = w[i];
			val[cnt] = val[i];
		}
	}
	for(int i=cnt;i>=1;i--){
		for(int j=V;j>=w[i];j--)
			if( f[j] < f[j-w[i]]+val[i])
				f[j] = f[j-w[i]]+val[i];
	}
	printf("%d",f[V]);
}