想到了个歪路子 结果想不通怎么样例都过不去QAQ
#include<bits/stdc++.h>
int imax(int x,int y){
if(x>y)return x;
else return y;
}
struct cloud{
bool p;
int g;
}s[10010];
int n,m,w,c[10010],d[10010],g;
int main(){
scanf("%d%d%d",&n,&m,&w);
for(int i=1;i<=n;i++)
scanf("%d%d",&c[i],&d[i]);
for(int i=1;i<=m;i++){
int a,b;
scanf("%d%d",&a,&b);
s[a].g=s[b].g=imax(s[a].g,s[b].g);
if(s[a].g==0)
s[a].g=s[b].g=++g;
}
int q(0);
for(int i=1;i<=g;i++){
int t=0,r=0;
for(int i=1;i<=n;i++)
if(!s[i].p&&s[i].g==g)
t+=c[i],r+=d[i],s[i].p=true;
if(t<=w)q=imax(q,r);
}
printf("%d",q);
return 0;
}
ps.本人经常犯低级错误