您的位置:首页 > 其它

最小生成树变型——[Usaco2008 Oct]灌水

2011-03-24 20:49 267 查看
咋一看还以为是,求森林里树的最小和
实际增加0点就是求最小生成树了……
View Code

#include<stdio.h>

int map[309][309];
int dis[309];
int p[309];
bool use[309];
int n;

void krus()
{
int i,min,rj,j;
for(i=0;i<=n;i++)
{
use[i]=0;
dis[i]=map[0][i];
}
use[0]=1;
int add=0;

for(i=0;i<n;i++)
{
min=99999999;
for(j=0;j<=n;j++)
{
if(use[j]==1)continue;
if(dis[j]<min)
{
min=dis[j];
rj=j;
}
}
use[rj]=1;
add+=min;

for(j=0;j<=n;j++)
{
if(use[j]==1)continue;
if(dis[j]>map[rj][j])
dis[j]=map[rj][j];
}
}

printf("%d\n",add);
}

int main()
{
int i,j;
while(scanf("%d",&n)!=EOF)
{
for(i=1;i<=n;i++)
scanf("%d",&p[i]);

for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
scanf("%d",&map[i][j]);
}
}
for(i=1;i<=n;i++)
{
map[0][i]=p[i];
map[i][0]=p[i];
}

krus();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: