20分,求助大佬
查看原帖
20分,求助大佬
558299
lzc2006楼主2022/6/24 22:07
#include<iostream>
#include<cstdio> 
#include<cmath> 
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;

long long n,m,w,v1,v2,father[100010];

struct ww{
	long long c,d;
}v[100100];

int find(int x1)
{
	if(father[x1]==x1)
	return x1;
	return father[x1]==find(father[x1]);
}

void www(int x,int y)
{
	int xx=find(x);
	int yy=find(y);
	if(xx!=yy)
	{
		father[yy]=xx;
		v[xx].c+=v[yy].c;
		v[yy].c=0;
		v[xx].d+=v[yy].d;
		v[yy].d=0;
	}
	
}

bool cmp(ww a,ww b)
{
	return a.d>b.d;
}

int main()
{
	cin>>n>>m>>w;
	for(int i=1;i<=n;i++)
	{
		father[i]=i;
	}
	for(int i=1;i<=n;i++)
	{
		cin>>v[i].c>>v[i].d;
	}
	for(int i=1;i<=m;i++)
    {
    	cin>>v1>>v2;
    	www(v1,v2);
	}
	sort(v+1,v+1+n,cmp);
	for(int i=1;i<=n;i++)
	{
		cout<<v[i].c<<' '<<v[i].d<<endl;
		if(v[i].c<=w)
		{
			cout<<v[i].d<<endl;
		    return 0;
		}
	}
}
2022/6/24 22:07
加载中...