mirror of
https://github.com/Kiritow/OJ-Problems-Source.git
synced 2024-03-22 13:11:29 +08:00
Create 38_17age.cpp
This commit is contained in:
parent
31504a798a
commit
4742673e1f
72
NYOJ/38_17age.cpp
Normal file
72
NYOJ/38_17age.cpp
Normal file
|
@ -0,0 +1,72 @@
|
|||
#include<iostream>
|
||||
#include<algorithm>
|
||||
#include<stdio.h>
|
||||
#include<string.h>
|
||||
#include<math.h>
|
||||
using namespace std;
|
||||
const int maxn=505;
|
||||
const int INF=0x3f3f3f3f;
|
||||
int map[maxn][maxn];
|
||||
int dis[maxn];
|
||||
int vis[maxn];
|
||||
int N;//N组测试数据
|
||||
int V;//点的数量
|
||||
int E;//边的数量
|
||||
int min_num;//最小外接花费
|
||||
void init()
|
||||
{
|
||||
scanf("%d%d",&V,&E);
|
||||
for(int i=0; i<=V; i++)//初始化图
|
||||
for(int j=0; j<=V; j++)
|
||||
i==j?map[i][j]=0:map[i][j]=INF;
|
||||
while(E--)//建图
|
||||
{
|
||||
int a,b,c;
|
||||
scanf("%d%d%d",&a,&b,&c);
|
||||
map[a][b]=c;//无向图
|
||||
map[b][a]=c;
|
||||
}
|
||||
min_num=INF;
|
||||
for(int i=1; i<=V; i++)
|
||||
{
|
||||
int x;
|
||||
scanf("%d",&x);
|
||||
min_num=min(min_num,x);//生成树连接到外界的最小花费
|
||||
dis[i]=map[i][1];//从1开始构造最小生成树
|
||||
}
|
||||
memset(vis,0,sizeof(vis));
|
||||
vis[1]=1;//0代表是外界
|
||||
}
|
||||
void Prim()
|
||||
{
|
||||
int min_cost=0;//初始化最小花费
|
||||
for(int i=1; i<V; i++)
|
||||
{
|
||||
int minn=INF;
|
||||
int point_minn;
|
||||
for(int j=1; j<=V; j++)
|
||||
if(vis[j]==0&&minn>dis[j])
|
||||
{
|
||||
point_minn=j;
|
||||
minn=dis[j];
|
||||
}
|
||||
if(minn==INF)
|
||||
break;
|
||||
min_cost+=dis[point_minn];
|
||||
vis[point_minn]=1;
|
||||
for(int j=1; j<=V; j++)
|
||||
if(vis[j]==0&&dis[j]>map[point_minn][j])
|
||||
dis[j]=map[point_minn][j];
|
||||
}
|
||||
printf("%d\n",min_cost+min_num);
|
||||
}
|
||||
int main()
|
||||
{
|
||||
scanf("%d",&N);
|
||||
while(N--)
|
||||
{
|
||||
init();
|
||||
Prim();
|
||||
}
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user