40分,求助大佬
查看原帖
40分,求助大佬
483519
梁家豪12345楼主2022/7/2 16:35
#include<bits/stdc++.h>
using namespace std;
inline int read(void)
{
	char c=getchar(),f=1,x=0;
	while(c>'9'||c<'0')
	{
		if(c=='-')f=-f;
		c=getchar();
	}
	while(c>='0'&&c<='9')x=x*10+c-'0',c=getchar();
	return x*f;
}
const int N=11000;
int n,m,val;
int tot,father[N];
int w[N],f[N],v[N];
int x,y;
int find(int x)
{
	if(father[x]!=x)return father[x]=find(father[x]);
	return x;
}
int main(void)
{
	n=read();m=read();val=read();
	father[0]=0;
	for(int i=1;i<=n;i++)
	{
		w[i]=read();
		v[i]=read();
		father[i]=i;
	}
	for(int i=1;i<=m;i++)
	{
		x=read();
		y=read();
		int fx=find(x),fy=find(y);
		if(fx!=fy)
		{
			father[fy]=fx;w[fx]+=w[fy];v[fx]+=v[fy];
		}
	}
	for(int i=1;i<=n;i++)
	{
		if(father[i]==i)
		{
			w[++tot]=w[i];
			v[tot]=v[i];
		}
	}
	for(int i=1;i<=tot;i++)
	{
		for(int j=val;j>=w[i];j--)f[j]=max(f[j-w[i]]+v[i],f[j]);
	}
	cout<<f[val];
	return 0;
}

求助!!!

2022/7/2 16:35
加载中...