社区讨论

蒟蒻求助,为什么一排序wa,不排序没事

P1455搭配购买参与者 2已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@lo8v94c6
此快照首次捕获于
2023/10/28 01:07
2 年前
此快照最后确认于
2023/10/28 01:07
2 年前
查看原帖
CPP
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
#define ll long long
#define inf 0x3f3f3f3f
ll n,m,w,dp[1001011];
struct NODE
{
	int fa,sz;
	ll cos,val;
	bool operator<(const NODE&x)const
	{
		if(fa!=x.fa)
		{
			return fa<x.fa;
		}
		else
		{
			return sz>x.sz;
		}
	}
}node[111111];
int f_ind(int x)
{
	return node[x].fa=x==node[x].fa?x:f_ind(node[x].fa);
}
int main()
{
	cin>>n>>m>>w;
	for(int i=1;i<=n;i++)
	{
		cin>>node[i].cos>>node[i].val;
		node[i].fa=i;
		node[i].sz=1;
	}
	for(int i=1;i<=m;i++)
	{
		int x,y;
		cin>>x>>y;
		int fx=f_ind(x),fy=f_ind(y);
		if(fx==fy)continue;
		node[fx].sz+=node[fy].sz;
		node[fx].cos+=node[fy].cos;
		node[fx].val+=node[fy].val;
		node[f_ind(y)].fa=node[f_ind(x)].fa;
	}
	sort(node+1,node+1+n);
	cout<<endl<<endl<<endl<<endl;////////////////////
	for(int i=1;i<=n;i++)
	{
		cout<<node[i].fa<<" "<<node[i].sz<<endl;
	}
	int last=-1;
	for(int i=1;i<=n;i++)
	{
//		if(node[i].fa==last)continue;
//		last=node[i].fa;
		if(node[i].fa!=i)continue;
		for(int j=w;j>=node[i].cos;j--)
		{
			dp[j]=max(dp[j],dp[j-node[i].cos]+node[i].val);
		}
	}
	cout<<dp[w];
	return 0;
}

回复

2 条回复,欢迎继续交流。

正在加载回复...