hdu Constructing Roads

来源:互联网 发布:男朋友生日钱包 知乎 编辑:程序博客网 时间:2024/05/29 07:12

题意:给出一个数N,表示有N个城市,接下来的矩阵就表示,各城市之间的连通价格,

然后给一个数M,接下的M行表示,每两个数为两个城市已经连通。(那么我们可以表示为零);

这个题可以直接用模板解决。

 

 

#include<stdio.h>#include<string.h>const int maxn = 110;#define INF 0xfffffffint n,m,map[maxn][maxn],lowcost[maxn],vis[maxn];int prim(){    int i,j,k;    int mins,yes,sum=0;    for(i=1;i<=n;i++) lowcost[i] = map[1][i];    memset(vis,0,sizeof(vis));    vis[1]=1;    for(;;)    {        mins=INF;        yes=-1;        for(j=1;j<=n;j++)        {            if(!vis[j] && lowcost[j] <mins)            {                mins = lowcost[j];                yes=1;                k=j;            }        }        if(yes==-1) break;        sum+=mins;        vis[k]=1;        for(j=1;j<=n;j++)            if(!vis[j] && lowcost[j] > map[k][j]) lowcost[j] = map[k][j];    }    return sum;}int main(){    int i,j;    int x,y;    while(scanf("%d",&n)!=EOF)    {        for(i=1;i<=n;i++)            for(j=1;j<=n;j++)                scanf("%d",&map[i][j]);        scanf("%d",&m);        for(i=1;i<=m;i++)        {            scanf("%d%d",&x,&y);            map[x][y]=map[y][x] = 0;        }        printf("%d\n",prim());    }    return 0;}


 

原创粉丝点击