题解 | #Chain sales#

Chain sales

https://ac.nowcoder.com/acm/contest/49599/E

这个题目是一道并查集 + dp ,首先先将所有编号相同的用并查集维护一下下然后再用一次01背包就可以


const int N=100010;
int v[N];
int w[N];
int vol;
int p[N];
int dp[N];
int n,m;

int find(int x)
{
	if(p[x] != x)
	{
		p[x] = find(p[x]);
	}
	return p[x];
}
void solve()
{
	ios;
	cin>>n>>m>>vol;
	for(int i = 1 ; i <= n ; i ++ )
	{
		p[i] = i;
		
	}
	
	for(int i = 1 ; i <= n ; i ++ )
	{
		cin>>v[i]>>w[i];
		
	}
	while(m -- )
	{
		int a , b;
		cin>>a>>b;
		int pa = find(a);
		int pb = find(b);
		if(pa != pb)
		{
			v[pb] += v[pa];
			w[pb] += w[pa];
			p[pa] = p[pb];
			
			
		}
	}
	for(int i = 1 ; i <= n ; i ++ )
	{
		if(p[i] == i)
		{
			for(int j = vol ; j >= v[i] ; j -- )
			{
				dp[j] = max(dp[j] , dp[j - v[i]] + w[i]);
				
			}
		}
	}
	cout<<dp[vol];
}
signed main()
{

	solve();
	return 0;
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
06-25 20:45
点赞 评论 收藏
分享
05-12 17:00
门头沟学院 Java
king122:你的项目描述至少要分点呀,要实习的话,你的描述可以使用什么技术,实现了什么难点,达成了哪些数字指标,这个数字指标尽量是真实的,这样面试应该会多很多,就这样自己包装一下,包装不好可以找我,我有几个大厂最近做过的实习项目也可以包装一下
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务