下面的代码没有判断两个物品是否属于一个集合,但仍能通过
#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e5+6;
int fa[MAXN];
int f[MAXN];
int v[MAXN],w[MAXN];
int n,m,u;
int find(int x)
{
if(fa[x]!=x) fa[x]=find(fa[x]);
return fa[x];
}
int main()
{
cin>>n>>m>>u;
for(int i=1;i<=n;i++)
fa[i]=i;
for(int i=1;i<=n;i++)
cin>>v[i]>>w[i];
while (m--)
{
int x,y;
cin>>x>>y;
int fx=find(x),fy=find(y);
v[fy]+=v[fx];
w[fy]+=w[fx];
fa[fx]=fy;
}
for(int i=1;i<=n;i++)
if(fa[i]==i)
for(int j=u;j>=v[i];j--)
f[j]=max(f[j],f[j-v[i]]+w[i]);
cout<<f[u]<<endl;
return 0;
}