help
查看原帖
help
239428
twz050412楼主2021/7/7 20:28
#include <bits/stdc++.h>
using namespace std;
int n,m,v;
int c[100005],d[100005];
int fa[100005];
int find(int x)
{
	if(fa[x]==x)return x;
     return fa[x]=find(fa[x]);
}
int f[20005];
//vector<int> g[1005];
int main()
{   
	cin>>n>>m>>v;
	for(int i=1;i<=n;i++)fa[i]=i;
	for(int i=1;i<=n;i++)
	cin>>c[i]>>d[i];
	int x,y;
	for(int i=1;i<=m;i++)
	{
		cin>>x>>y;
		fa[find(x)]=find(y);
		//g[x].push_back(y);
		//g[y].push_back(x);
	}
	for(int i=1;i<=n;i++)
	{
		if(fa[i]!=i)
		{
			c[fa[i]]+=c[i];
			c[i]=0;
			d[fa[i]]+=d[i];
			d[i]=0;
		}
	}
	for(int i=1;i<=n;i++)
	{
		
			for(int w=v;w>=c[i];w--)
			{
				f[w]=max(f[w],f[w-c[i]]+d[i]);
			} 
		
	}
	cout<<f[v];
	
    return 0;
}
2021/7/7 20:28
加载中...