国产探花免费观看_亚洲丰满少妇自慰呻吟_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;}
 
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 原阳县| 许昌县| 青州市| 平南县| 临湘市| 灵川县| 理塘县| 井研县| 西城区| 乌恰县| 牡丹江市| 青浦区| 益阳市| 绍兴县| 克什克腾旗| 桑植县| 昌图县| 泸水县| 莆田市| 宣化县| 苍山县| 镇坪县| 芦溪县| 县级市| 逊克县| 泌阳县| 洛浦县| 汾西县| 浦城县| 凌海市| 南投市| 安康市| 万安县| 南和县| 镇巴县| 大安市| 金川县| 天峻县| 德惠市| 铁力市| 泰来县|