#include <iostream>
#include <cstring>
#include <vector>
using namespace std;
int w[10005],v[10005],a[10001];
int findpy(int x){
if(x==a[x]){
return a[x];
}
return a[x]=findpy(a[x]);
}
int main(){
int T;
cin>>T;
while(T--){
int n,m,c,x,y;
cin>>n>>m>>c;
for(int i=1;i<=n;i++)
a[i]=i;
for(int i=2;i<=n;i++)
cin>>w[i]>>v[i];
for(int i=0;i<m;i++){
cin>>x>>y;
int fx=findpy(x);
int fy=findpy(y);
if(fx!=fy){
a[fx]=fy;
}
}
int py=findpy(1),j=0;
for(int i=2;i<=n;i++){
if(findpy(i)==py){
w[j]=w[i];
v[j++]=v[i];
}
}
int dp[c+1];
memset(dp,0,sizeof(dp));
for(int i=0;i<j;i++){
for(int k=c;k>=w[i];k--){
dp[k]=max(dp[k],dp[k-w[i]]+v[i]);
}
}
cout<<dp[c]<<endl;
}
}
#include <cstring>
#include <vector>
using namespace std;
int w[10005],v[10005],a[10001];
int findpy(int x){
if(x==a[x]){
return a[x];
}
return a[x]=findpy(a[x]);
}
int main(){
int T;
cin>>T;
while(T--){
int n,m,c,x,y;
cin>>n>>m>>c;
for(int i=1;i<=n;i++)
a[i]=i;
for(int i=2;i<=n;i++)
cin>>w[i]>>v[i];
for(int i=0;i<m;i++){
cin>>x>>y;
int fx=findpy(x);
int fy=findpy(y);
if(fx!=fy){
a[fx]=fy;
}
}
int py=findpy(1),j=0;
for(int i=2;i<=n;i++){
if(findpy(i)==py){
w[j]=w[i];
v[j++]=v[i];
}
}
int dp[c+1];
memset(dp,0,sizeof(dp));
for(int i=0;i<j;i++){
for(int k=c;k>=w[i];k--){
dp[k]=max(dp[k],dp[k-w[i]]+v[i]);
}
}
cout<<dp[c]<<endl;
}
}
全部评论
(0) 回帖