AC了但是没搞懂捏...QAQ
查看原帖
AC了但是没搞懂捏...QAQ
544510
izumi_sagiri_楼主2022/7/30 10:28

WA code:

#include <bits/stdc++.h>
using namespace std;
int fa[10005],c[10005],d[10005],dp[10005];//重量dp 
int n,m,w,u,v;
inline void init()
{
	for(int i=1;i<=10005;i++)
	{
		fa[i]=i;
	}
}
inline int find_fa(int x)
{
	if(fa[x]!=x) fa[x]=find_fa(fa[x]);
	return fa[x];
}
inline void union_fa(int x,int y)
{
	x=find_fa(x);
	y=find_fa(y);
	if(x!=y) fa[x]=y;
}
int main()
{
	ios::sync_with_stdio(false);
	cin>>n>>m>>w;
	init();
	for(int i=1;i<=n;i++)
	{
		cin>>c[i]>>d[i];
	}
	for(int i=1;i<=m;i++)
	{
		cin>>u>>v;
		union_fa(u,v);
	}
	for(int i=1;i<=n;i++)
	{
		if(fa[i]!=i)
		{
			c[fa[i]]+=c[i];
			d[fa[i]]+=d[i];
			c[i]=d[i]=0;
		}
	}
	for(int i=1;i<=n;i++)
	{
		if(c[i]==0 && d[i]==0) continue;
		for(int j=w;j>=c[i];j--)
		{
			dp[j]=max(dp[j],dp[j-c[i]]+d[i]);
		}
	}
	cout<<dp[w];
	return 0;
}

AC code:

#include <bits/stdc++.h>
using namespace std;
int fa[10005],c[10005],d[10005],dp[10005];//重量dp 
int n,m,w,u,v;
inline void init()
{
	for(int i=1;i<=10005;i++)
	{
		fa[i]=i;
	}
}
inline int find_fa(int x)
{
	if(fa[x]!=x) fa[x]=find_fa(fa[x]);
	return fa[x];
}
inline void union_fa(int x,int y)
{
	x=find_fa(x);
	y=find_fa(y);
	if(x!=y) fa[x]=y;
}
int main()
{
	ios::sync_with_stdio(false);
	cin>>n>>m>>w;
	init();
	for(int i=1;i<=n;i++)
	{
		cin>>c[i]>>d[i];
	}
	for(int i=1;i<=m;i++)
	{
		cin>>u>>v;
		union_fa(u,v);
	}
	for(int i=1;i<=n;i++)
	{
		if(fa[i]!=i)
		{
			c[find_fa(i)]+=c[i];//只改了此处
			d[find_fa(i)]+=d[i];
			c[i]=d[i]=0;
		}
	}
	for(int i=1;i<=n;i++)
	{
		if(c[i]==0 && d[i]==0) continue;
		for(int j=w;j>=c[i];j--)
		{
			dp[j]=max(dp[j],dp[j-c[i]]+d[i]);
		}
	}
	cout<<dp[w];
	return 0;
}

为什么两个不一样啊QAQ

2022/7/30 10:28
加载中...