1. 程式人生 > >【最小生成樹】POJ 1287 Networking

【最小生成樹】POJ 1287 Networking

Description

You are assigned to design network connections between certain points in a wide area. You are given a set of points in the area, and a set of possible routes for the cables that may connect pairs of points. For each possible route between two points, you are given the length of the cable that is needed to connect the points over that route. Note that there may exist many possible routes between two given points. It is assumed that the given possible routes connect (directly or indirectly) each two points in the area.
Your task is to design the network for the area, so that there is a connection (direct or indirect) between every two points (i.e., all the points are interconnected, but not necessarily by a direct cable), and that the total length of the used cable is minimal.

Input

The input file consists of a number of data sets. Each data set defines one required network. The first line of the set contains two integers: the first defines the number P of the given points, and the second the number R of given routes between the points. The following R lines define the given routes between the points, each giving three integer numbers: the first two numbers identify the points, and the third gives the length of the route. The numbers are separated with white spaces. A data set giving only one number P=0 denotes the end of the input. The data sets are separated with an empty line.
The maximal number of points is 50. The maximal length of a given route is 100. The number of possible routes is unlimited. The nodes are identified with integers between 1 and P (inclusive). The routes between two points i and j may be given as i j or as j i.

Output

For each data set, print one number on a separate line that gives the total length of the cable used for the entire designed network.

Sample Input

1 0

2 3
1 2 37
2 1 17
1 2 68

3 7
1 2 19
2 3 11
3 1 7
1 3 5
2 3 89
3 1 91
1 2 32

5 7
1 2 5
2 3 7
2 4 8
4 5 11
3 5 10
1 5 6
4 2 12

0

Sample Output

0
17
16
26

很簡單的最小生成樹,kruskal輕鬆搞定

#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
const int MAXM=150000+10,MAXN=1000+10;
int fa[MAXN];
struct node{
    int beg;
    int end;
    int s;
};
node a[MAXM];
void read(int &x)
{
    x=0;
    char c=getchar();
    while(c<'0'||c>'9')c=getchar();
    while(c>='0'&&c<='9')
    {
        x=x*10+c-'0';
        c=getchar();
    }
}
int found(int x)
{
    if(fa[x]!=x)fa[x]=found(fa[x]);
    return fa[x];
}
int comp(const node&i,const node&j)
{
    return i.s<j.s;
}
int main()
{
    int p;
    read(p);
    while(p!=0)
    {
        int r;
        read(r);
        for(int i=1;i<=p;i++)fa[i]=i;
        for(int i=1;i<=r;i++)
        {
            read(a[i].beg);
            read(a[i].end);
            read(a[i].s);
        }
        sort(a+1,a+r+1,comp);
        int s=0,ans=0;
        for(int i=1;i<=r;i++)
        {
            if(found(a[i].beg)!=found(a[i].end))
            {
                fa[found(a[i].beg)]=found(a[i].end);
                s++;
                ans+=a[i].s;
                if(s==p-1)break;
            }
        }
        printf("%d\n",ans);
        read(p);
    }
    return 0;
}

相關推薦

小生成樹POJ 1287 Networking

Description You are assigned to design network connections between certain points in a wide area. You are given a set of points in

The Unique MST POJ - 1679小生成樹

題目連結   看到這道題的時候我心裡一驚,求不同的最小生成樹!我的天吶,然後又看到這麼多人過了,一想,一定是簡單的題,然後就用Kruskal做了個不同邊的等價值降序/升序連結邊的端點的序號快排處理,然後加上個兩次Kruskal果然是這樣!就這樣過了。 #include &l

ACM- POJ-1861 Network 小生成樹

題目連結 題目分析 最小生成樹問題,不過要求得不是路徑和,而是使生成樹中的最長邊最小; | 細節: 1、結點編號1~N 2、注意題目給的測試資料有BUG; 解題思路 Kruskal演算法

POJ1278 Networking小生成樹

Networking Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 17238 Accepted: 8992 Description You are assigne

小生成樹kruscal貪心CDOJ1636 夢後樓臺高鎖,酒醒簾幕低垂

ext 停止 min 時間 定義 cal ssi sin 我們 給你一個有n個點和m條邊的無向連通圖,每條邊都有一個權值ww.我們定義,對於一條路徑,它的Charm value為該路徑上所有邊的權值的最大值與最小值的差.詢問從1到n的所有路徑的Charm value的最小值

小生成樹口袋的天空

%d 試題 output str dig syntax 棉花糖 esp tput 口袋的天空 背景 小杉坐在教室裏,透過口袋一樣的窗戶看口袋一樣的天空。 有很多雲飄在那裏,看起來很漂亮,小杉想摘下那樣美的幾朵雲,做成棉花糖。 描述 給你雲朵的個數N,再給你M個關系

hdu 1863 [小生成樹+hdu2544floyed+hdu1874dijdtra~~~模板復習~~~

ref define str print break ++ 題目 n) div 題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=1863 #include<stdio.h> #include<strin

POJ2031 Building a Space Station小生成樹

col lap ret stream 坐標系 ide 最小 過程 如果 題意: 就是給出三維坐標系上的一些球的球心坐標和其半徑,搭建通路,使得他們能夠相互連通。如果兩個球有重疊的部分則算為已連通,無需再搭橋。求搭建通路的最小邊長總和是多少。 思路: 先處理空間點之間的距離,

POJ1751 Highways小生成樹

數組 != ont class color 生成 size end ron 題意: 給你N個城市的坐標,城市之間存在公路,但是由於其中一些道路損壞了,需要維修,維修的費用與公路長成正比(公路是直的)。 但現有M條公路是完整的,不需要維修,下面有M行,表示不需要維修的道路兩端

POJ1258 Agri-Net小生成樹

ios rim def define sin pri ret fine 輸出 題意: 有n個農場,已知這n個農場都互相相通,有一定的距離,現在每個農場需要裝光纖,問怎麽安裝光纖能將所有農場都連通起來,並且要使光纖距離最小,輸出安裝光纖的總距離。 思路: 又是一個最小生成樹,

bzoj 1626: [Usaco2007 Dec]Building Roads 修建道路小生成樹

namespace pri spa 最小 clas for AI ++ main 先把已有的邊並查集了,然後MST即可 記得開double #include<iostream> #include<cstdio> #include<algorit

HDU 4463 Outlets 小生成樹

let .net 鏈接 全部 題目 () 生成樹 father for <題目鏈接> 題目大意: 給你一些點的坐標,要求你將這些點全部連起來,但是必須要包含某一條特殊的邊,問你連起這些點的總最短距離是多少。 解題分析: 因為一定要包含那條邊,我們就記錄下那條邊的

3714. [PA2014]Kuglarz小生成樹

Description 魔術師的桌子上有n個杯子排成一行,編號為1,2,…,n,其中某些杯子底下藏有一個小球,如果你準確地猜出是哪些杯子,你就可以獲得獎品。花費c_ij元,魔術師就會告訴你杯子i,i+1,…,j底下藏有球的總數的奇偶性。 採取最優的詢問策略,你至少需要花費多少元,才能保證猜出哪些杯子底

CH6201 走廊潑水節小生成樹

its ios main return 平臺 pan 最小生成樹 最小 algo 6201 走廊潑水節 0x60「圖論」例題 描述 【簡化版題意】給定一棵N個節點的樹,要求增加若幹條邊,把這棵樹擴充為完全圖,並滿足圖的唯一最小生成樹仍然是這棵樹。求增加的邊的權值總和最

洛谷P1547Out of Hay小生成樹

題目大意: 題目連結:https://www.luogu.org/problemnew/show/P1547 求一個圖中生成樹最長邊長度最小的最小生成樹的最長邊。 思路: 閒的無聊刷水題。 很明顯一個最小生成樹過去求最長邊就可以了。 然後打了一個

小生成樹prim演算法

演算法分析的一般步驟: 1、文字描述:如果一個演算法文字描述不清楚,就說明思路不清楚,也不可能寫好。 prim演算法是實現圖的最小生成樹。既然是圖,就假設包含n個頂點,m條邊。prim演算法是從頂點出發的,其演算法時間複雜度與頂點數目有關係。 (注意:prim演算法適合稠密圖,其時間複雜度為O(n^2)

小生成樹Prim 普里姆演算法,Kruskal 克魯斯卡爾演算法生成 小生成樹

1.Analyse 來自兩位科學家。 生成最小生成樹,從0頂點出發,最小生成樹包含所以頂點>_<,這個作業難道好像就是似乎改個矩陣? 最好還是把最小生成樹變成一條路線,這樣就不用去,自己找路線了。 題目圖如圖 2.源自老師的Code Print 1Prim

ACM- HDU.1863 暢通工程 小生成樹

題目連結 題目分析 最小生成樹問題,求路徑和 解題思路 算是最小生成樹的母題,分別用以下幾種方法實現以下: 1、Kruskal演算法 + 並查集; 2、Prime演算法 (鄰接矩陣

ACM- HDU-1879 繼續暢通工程 小生成樹

題目連結 題目分析 最小生成樹問題; 解題思路 用Kruskal演算法即可,把修通道路(邊)的權值(距離)令為0即可; AC程式(C++) /********************************** *@ID: 3stone *@

ACM- HDU-3371 Connect the Cities 小生成樹

題目連結 題目分析 最小生成樹問題; 解題思路 把已連通的結點間的距離(邊權)令為0,統一加入邊集合; 用Kruskal演算法 + 並查集解決;Kruskal演算法中邊的排序用容器priority_queue(堆結構)實現; AC程式(C