记录编号 318637 评测结果 AAAAAAAAAA
题目名称 搭配购买 最终得分 100
用户昵称 GravatarGo灬Fire 是否通过 通过
代码语言 C++ 运行时间 0.261 s
提交时间 2016-10-09 19:27:33 内存使用 0.54 MiB
显示代码纯文本
#include<cmath>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<iostream>
#include<cstdlib>
#define Begin freopen("buy.in","r",stdin);freopen("buy.out","w",stdout);
#define End fclose(stdin);fclose(stdout);
using namespace std;
const int maxn=15000;
int n,m,tot,w[maxn],v[maxn],root[maxn],f[maxn];
void Init();
int Findroot(int x){
	if(root[x]!=x)root[x]=Findroot(root[x]);
	return root[x];
}
int main(){
    Begin;
    Init();
    //system("pause");
    return 0;
}
void Init(){
	scanf("%d%d%d",&n,&m,&tot);
	for(int i=1;i<=n;i++){
		root[i]=i;scanf("%d%d",&w[i],&v[i]);
	}
	int cnt=0;
	for(int i=1;i<=m;i++){
		int x,y;scanf("%d%d",&x,&y);
		int rx=Findroot(x),ry=Findroot(y);
		if(rx==ry)continue;
		else {
			if(rx>ry)swap(rx,ry);
			root[ry]=rx;
			w[rx]+=w[ry];v[rx]+=v[ry];
			w[ry]=0;v[ry]=0;
		}
	}
	for(int i=1;i<=n;i++){
		if(w[i]==0)continue;
		for(int j=tot;j>=w[i];j--){
			f[j]=max(f[j],f[j-w[i]]+v[i]);
		}
	}
	printf("%d\n",f[tot]);
}