您的位置:首页 > 其它

hdu 1301 Jungle Roads

2013-04-16 18:39 190 查看
/* MST 水题!*/

#include<cstring>

#include<cstdio>

#define INF 1<<30

int map[30][30],low[30],vis[30];

int n;

int prim()

{

int ans=0;

for(int i = 0; i <= n; i++)

low[i] = map[1][i];

vis[1] = 1;

for(int i = 1; i < n; i++)

{

int temp = INF,pos=-1;

for(int j = 0; j < n; j++)

if(!vis[j]&&temp>low[j])

{

temp=low[j];

pos = j;

}

//if(pos==-1) return -1;

vis[pos] = 1;

ans += low[pos];

for(int j = 0; j < n; j++)

if(!vis[j]&&low[j]>map[pos][j])

low[j] = map[pos][j];

}

return ans;

}

int main()

{

char ch[2],cha[2];

int cm,cma;

while(scanf("%d",&n),n)

{

memset(vis,0,sizeof(vis));

for(int i = 0; i < n; i++)

for(int j = 0; j < n; j++)

map[i][j] = INF;

for(int i = 1; i < n; i++)

{

scanf("%s %d",&ch,&cm);

int x = ch[0]-'A';

while(cm--)

{

scanf("%s %d",&cha,&cma);

int y = cha[0]-'A';

if(cma<map[x][y])

map[x][y] = map[y][x] = cma;

}

}

printf("%d\n",prim());

}

return 0;

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