首页 > 编程语言 >hihoCoder 1097 : 最小生成树一·Prim算法

hihoCoder 1097 : 最小生成树一·Prim算法

时间:2023-02-20 16:34:55浏览次数:44  
标签:loc 1097 Prim map int 城市 hihoCoder vis dis



#1097 : 最小生成树一·Prim算法


10000ms



1000ms



256MB



描述

最近,小Hi很喜欢玩的一款游戏模拟城市开放出了新Mod,在这个Mod中,玩家可以拥有不止一个城市了!

但是,问题也接踵而来——小Hi现在手上拥有N座城市,且已知这N座城市中任意两座城市之间建造道路所需要的费用,小Hi希望知道,最少花费多少就可以使得任意两座城市都可以通过所建造的道路互相到达(假设有A、B、C三座城市,只需要在AB之间和BC之间建造道路,那么AC之间也是可以通过这两条道路连通的)。


输入

每个测试点(输入文件)有且仅有一组测试数据。

在一组测试数据中:

第1行为1个整数N,表示小Hi拥有的城市数量。

接下来的N行,为一个N*N的矩阵A,描述任意两座城市之间建造道路所需要的费用,其中第i行第j个数为Aij,表示第i座城市和第j座城市之间建造道路所需要的费用。

对于100%的数据,满足N<=10^3,对于任意i,满足Aii=0,对于任意i, j满足Aij=Aji, 0<Aij<10^4.

输出

对于每组测试数据,输出1个整数Ans,表示为了使任意两座城市都可以通过所建造的道路互相到达至少需要的建造费用。


样例输入

5 0 1005 6963 392 1182 1005 0 1599 4213 1451 6963 1599 0 9780 2789 392 4213 9780 0 5236 1182 1451 2789 5236 0

样例输出

4178


//与最短路劲的Dijkstra算法 类似
//给出整个邻接矩阵
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
using namespace std;
#define N 1001
#define MAX 99999999
int map[N][N];
int dis[N],vis[N];
int n;
int prime()
{
int i,j,loc,min;
memset(vis,0,sizeof(vis));

int ans=0;
loc=1;
for(i=1;i<=n;i++)
dis[i]=map[loc][i];

vis[loc]=1;
for(i=1;i<n;i++)
{
min=MAX;
loc=-1;
for(j=1;j<=n;j++)
{
if(!vis[j]&&dis[j]<min)
{
loc=j;
min=dis[j];
}
}
ans+=min;
vis[loc]=1;
for(j=1;j<=n;j++)
{
if(!vis[j]&&map[loc][j]<dis[j])
{
dis[j]=map[loc][j];
}
}
}
return ans;
}
int main()
{
int i,j,a;

while(scanf("%d",&n)!=EOF)
{
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
scanf("%d",&a);
map[i][j]=a;
}
printf("%d\n",prime());
}
return 0;
}

标签:loc,1097,Prim,map,int,城市,hihoCoder,vis,dis
From: https://blog.51cto.com/u_1382267/6068701

相关文章

  • hihoCoder 1089 : 最短路径·二:Floyd算法
    #1089:最短路径·二:Floyd算法10000ms1000ms256MB描述万圣节的中午,小Hi和小Ho在吃过中饭之后,来到了一个新的鬼屋!鬼屋中一共有N个地点,分别编号为1..N,这N个地点之......
  • hihoCoder 1043 : 完全背包
    #1043:完全背包20000ms1000ms256MB描述且说之前的故事里,小Hi和小Ho费劲心思终于拿到了茫茫多的奖券!而现在,终于到了小Ho领取奖励的时刻了!等等,这段故事为何似曾......
  • hihoCoder 1078 : 线段树的区间修改
    #1078:线段树的区间修改10000ms1000ms256MB描述对于小Ho表现出的对线段树的理解,小Hi表示挺满意的,但是满意就够了么?于是小Hi将问题改了改,又出给了小Ho:假设货架上......
  • C++ primer 5th 第一章阅读笔记
    第一章开始第一节编写一个简单的C++程序不同编译器使用不同的后缀命名约定,比如cc、cpp、c。比如main程序保存到prog1.cc中,可以使用如下命令来编译它:ccprog1.cc。其中......
  • HDOJ1097 A hard puzzle
    AhardpuzzleTimeLimit:2000/1000MS(Java/Others)    MemoryLimit:65536/32768K(Java/Others)TotalSubmission(s):46236    AcceptedSubmission(s):......
  • Pseudoprime numbers(POJ-3641 快速幂)
    快速幂:快速幂就是所求的幂次方过大,导致代码所用的时间超限。如:求2^3,3的二进制是11,(n&1)判断次方数的二进制是否为1,n>>1,向右进位1:代码:k=1,t=n;while(n){if(n&1)//......
  • C++PrimerPlus中文第六版第11章编程练习答案
    1、//vector.h#ifndefVECTOR_H_#defineVECTOR_H_#include<iostream>namespaceVECTOR{classVector{public:enumMode{RECT,POL};......
  • [Primer] 第 3 章
    第3章处理数据3.1简单变量变量名区分大小写字母。不允许定义下划线_或双下划线__开头的变量。可以使用sizeof关键字确认类或变量的长度,climits头文件确认......
  • attempted to return null from a method with a primitive return type (int).
    错误原因分析本次报错的原因在于sql语句未查询到数据,返回为null。而我们定义的dao层方法是返回为int,就会出现如下这样的提示:returnnullfromamethodwithaprimitiver......
  • CesiumJS PrimitiveAPI 高级着色入门 - 从参数化几何与 Fabric 材质到着色器 - 下篇
    目录3.使用GLSL着色器3.1.为Fabric材质添加自定义着色代码-Fabric材质的本质3.2.社区实现案例-泛光墙体和流动线材质3.3.直接定义外观对象的两个着色器3.4.*......