记录编号 242888 评测结果 AAAAAAAAAA
题目名称 搭配购买 最终得分 100
用户昵称 Gravatar水墨青花 是否通过 通过
代码语言 C++ 运行时间 0.337 s
提交时间 2016-03-28 16:50:32 内存使用 0.46 MiB
显示代码纯文本
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<deque>

using namespace std;

void Read();
void Union(int,int);
int Findroot(int);
void Work();

int n,m,w;
int c[10001],d[10001];
int father[10001];
int f[10001];

int main()
{
	freopen("buy.in","r",stdin);
	freopen("buy.out","w",stdout);
	
	memset(f,0,sizeof(f));
	memset(father,0,sizeof(father));
	memset(c,0,sizeof(c));
	memset(d,0,sizeof(d));
	
	Read();
	Work();
	
	
	
	fclose(stdin);
	fclose(stdout);
	return 0;
}

void Read()
{
	scanf("%d%d%d",&n,&m,&w);
	
	for(int i=1;i<=n;i++)
	{
		father[i]=i;
	}
	
	for(int i=1;i<=n;i++)
	{
		scanf("%d%d",&c[i],&d[i]);
	}
	
	int u,v;
	for(int i=1;i<=m;i++)
	{
		scanf("%d%d",&u,&v);
		Union(Findroot(u),Findroot(v));
	}
}

void Work()
{
	for(int i=1;i<=n;i++)
	{
		for(int j=w;j>=c[i];j--)
		{
			f[j]=max(f[j-c[i]]+d[i],f[j]);
		}
/*		for(int x=1;x<=w;x++)
		{
			cout<<f[x]<<' ';
		}
		cout<<endl;
*/	}
	
	printf("%d",f[w]);
}

int Findroot(int a)
{
	if(father[a]==a)
	{
		return a;
	}
	Findroot(father[a]);
}

void Union(int a,int b)
{
	c[a]+=c[b];
	c[b]=0;
	d[a]+=d[b];
	d[b]=0;
	father[b]=a;
}