#include<bits/stdc++.h>
using namespace std;
int fa[28571];
int sumU[28571];
int sumV[28571];
int f[28571];
int Get(int x){
	return x==fa[x]?x:fa[x]=Get(fa[x]); 
}
void Merge(int x,int y){
	fa[Get(x)]=Get(y);
}
int main(){
	int n,m,w;//Nitrogen:n;Magnesium:m;Tungstem:w 
	scanf("%d%d%d",&n,&m,&w);
	for(int i=1;i<=n;i++){
		fa[i]=i;
	}
	for(int i=1;i<=n;i++){
		int c,d;
		scanf("%d%d",&c,&d);
		sumU[i]=c;
		sumV[i]=d; 
	}
	while(m--){
		int u,v;
		scanf("%d%d",&u,&v);
		Merge(u,v);
		sumU[Get(v)]+=sumU[u];
		sumV[Get(v)]+=sumV[u];
	}
	for(int i=1;i<=n;i++){
		if(Get(i)==i){
			for(int v=w;v>=sumU[i];v--){
				if(f[v-sumU[i]]+sumV[i]>f[v]){
					f[v]=f[v-sumU[i]]+sumV[i];
				}
			}
		}
	}
	
	printf("%d",f[w]);
	return 0;
}

0 comments

No comments so far...

Information

ID
872
Time
1000ms
Memory
256MiB
Difficulty
8
Tags
# Submissions
30
Accepted
6
Uploaded By