简单最短路求调(玄关)
  • 板块灌水区
  • 楼主Go_Forward
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/3/10 10:37
  • 上次更新2024/3/10 11:48:05
查看原帖
简单最短路求调(玄关)
1253423
Go_Forward楼主2024/3/10 10:37

P1194 买礼物

我知道要用kruskal ,但是我就是不信邪

#include<bits/stdc++.h>
using namespace std;
int n,m,cost[505],xb,ans;
struct ss
{
	int x1,x2,sum;
}a[250005];
bool cmp(ss l,ss r)
{
	return l.sum<r.sum;
}
int main()
{
	cin>>n>>m;
	for(int i=1;i<=m;++i)
	  for(int j=1;j<=m;++j)
	  {
	  	int ls;
	  	cin>>ls;
	  	if(i>=j||ls==0)
	  	  continue;
	  	++xb;
	  	a[xb].x1=i;
	  	a[xb].x2=j;
	  	a[xb].sum=ls;
	  }
	sort(a+1,a+1+xb,cmp);
	for(int i=1;i<=m;++i)
	  cost[i]=n;
	for(int i=1;i<=xb;++i)
	{
		int x1=a[i].x1;
		int x2=a[i].x2;
		int sum=a[i].sum;
		if(cost[x1]+cost[x2]>sum+min(cost[x1],cost[x2]))
		{
			ans+=sum+min(cost[x1],cost[x2]);
			cost[x1]=0;
			cost[x2]=0;
		}
	}
	for(int i=1;i<=m;++i)
	  ans+=cost[i];
	cout<<ans<<'\n';
}
2024/3/10 10:37
加载中...