国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

圖結構練習——最小生成樹

2019-11-08 01:47:08
字體:
來源:轉載
供稿:網友

PRoblem Description

有n個城市,其中有些城市之間可以修建公路,修建不同的公路費用是不同的。現在我們想知道,最少花多少錢修公路可以將所有的城市連在一起,使在任意一城市出發,可以到達其他任意的城市。

Input

輸入包含多組數據,格式如下。第一行包括兩個整數n m,代表城市個數和可以修建的公路個數。(n <= 100, m <=10000)剩下m行每行3個正整數a b c,代表城市a 和城市b之間可以修建一條公路,代價為c。

Output

每組輸出占一行,僅輸出最小花費。

Example Input

3 21 2 11 3 11 0

Example Output

20
#include<stdio.h>#include<string.h>#define maxn 10005struct node{    int u;    int v;    int w;}tu[maxn];void getmap(int m){    int i;    for(i=1;i<=m;i++)    {        scanf("%d%d%d",&tu[i].u,&tu[i].v,&tu[i].w);    }}void QQsort(int left,int right){    int i,j,mid;    struct node m;    i=left; j=right; mid=tu[i].w; m=tu[i];    if(i>=j)        return ;    while(i<j)    {        while(i<j&&tu[j].w>=mid)            j--;        tu[i]=tu[j];        while(i<j&&tu[i].w<=mid)            i++;        tu[j]=tu[i];    }    tu[i]=m;    qqsort(left,i-1);    qqsort(j+1,right);}int find (int father[],int e){    int f;    f=e;    while(father[f]>0)    {        f=father[f];    }    return f;}void kruskal(int m){    int father[maxn];    int i,u,v,sum=0;    for(i=1;i<=m;i++)    {        father[i]=0;    }    for(i=1;i<=m;i++)    {        u=find(father,tu[i].u);        v=find(father,tu[i].v);        if(u!=v)        {            father[u]=v;            sum+=tu[i].w;        }    }    printf("%d/n",sum);}int main(){    int n,m,u,v,w;    while(scanf("%d%d",&n,&m)!=EOF)    {        getmap(m);        qqsort(1,m);        kruskal(m);    }    return 0;}
 
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 潍坊市| 保亭| 晋江市| 龙里县| 瑞安市| 行唐县| 筠连县| 读书| 读书| 嵊泗县| 兴安县| 扶风县| 东乌| 克山县| 吉木乃县| 丹江口市| 南澳县| 泸水县| 海丰县| 齐河县| 武清区| 溧水县| 崇州市| 保德县| 中方县| 鄂托克前旗| 鹤岗市| 南昌县| 集贤县| 乌拉特前旗| 呼图壁县| 宁强县| 吉首市| 卢湾区| 井研县| 南平市| 郁南县| 礼泉县| 富民县| 凌云县| 明光市|