只对了2个点求调
  • 板块P1194 买礼物
  • 楼主Reply_
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/8/18 15:19
  • 上次更新2023/10/27 14:46:32
查看原帖
只对了2个点求调
373530
Reply_楼主2022/8/18 15:19
#include<bits/stdc++.h>
using namespace std;
int dis[100001],ans=0;
bool vis[10001];
vector<int >g[10001],w[1000001];
int main()
{
	int n,m;
	cin >> n >> m;
	for(int i = 1;i<=m;i++)
	{
		for(int j = 1;j<=m;j++)
		{
			int x;
			cin >> x;
			if(x!=0)
			{
				g[i].push_back(j);
				w[i].push_back(x);
				g[j].push_back(i);
				w[j].push_back(x);
			}
			else
			{
				g[i].push_back(j);
				w[i].push_back(n);
				g[j].push_back(i);
				w[j].push_back(n);
			}
		}
	}
	memset(dis,0x3f,sizeof(dis));
	dis[1]=n;
	for(int k=1;k<=m;k++)
	{
		int u,minn=1e9;
		for(int i = 1;i<=m;i++)
		{
			if(!vis[i]&&dis[i]<minn)
			{
				minn=dis[i];
				u=i;
			}
		}
		vis[u]=1;
		ans+=dis[u];
//		cout << dis[u]<<endl;
		for(int i = 0;i<g[u].size();i++)
		{
			int v=g[u][i];
			dis[v]=min(dis[v],w[u][i]);
		}
	}
	for(int i =1;i<=n;i++)
	{
		if(!vis[i]) ans+=n;
	}
	cout << ans;
	return 0;
}
2022/8/18 15:19
加载中...