1. 程式人生 > >【最小生成樹】洛谷 P1546 最短網路 Agri-Net

【最小生成樹】洛谷 P1546 最短網路 Agri-Net

題目背景

農民約翰被選為他們鎮的鎮長!他其中一個競選承諾就是在鎮上建立起網際網路,並連線到所有的農場。當然,他需要你的幫助。

題目描述

約翰已經給他的農場安排了一條高速的網路線路,他想把這條線路共享給其他農場。為了用最小的消費,他想鋪設最短的光纖去連線所有的農場。

你將得到一份各農場之間連線費用的列表,你必須找出能連線所有農場並所用光纖最短的方案。每兩個農場間的距離不會超過100000

輸入輸出格式

輸入格式:

第一行: 農場的個數,N(3<=N<=100)。

第二行..結尾: 後來的行包含了一個N*N的矩陣,表示每個農場之間的距離。理論上,他們是N行,每行由N個用空格分隔的陣列成,實際上,他們限制在80個字元,因此,某些行會緊接著另一些行。當然,對角線將會是0,因為不會有線路從第i個農場到它本身。

輸出格式:

只有一個輸出,其中包含連線到每個農場的光纖的最小長度。

輸入輸出樣例

輸入樣例#1:

4
0 4 9 21
4 0 8 17
9 8 0 16
21 17 16 0

輸出樣例#1:

28

說明

題目翻譯來自NOCOW。

USACO Training Section 3.1

程式碼

#include<iostream>
#include<algorithm>
using namespace std;
const int MAXM=100000+10,MAXN=100+10;
struct node{
    int beg;
    int end;
    int
v; }; node a[MAXM]; int fa[MAXN],ans,s; 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.v<j.v; } int main() { int n; read(n); int k=1; for(int i=1;i<=n;i++)fa[i]=i; for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { a[k].beg=i; a[k].end=j; read(a[k].v); k++; } } sort(a+1,a+k,comp); k--; for(int i=1;i<=k;i++) { if(found(a[i].beg)!=found(a[i].end)) { fa[found(a[i].beg)]=found(a[i].end); ans+=a[i].v; s++; if(s==n-1)break; } } cout<<ans; return 0; }

相關推薦

小生成樹 P1546 網路 Agri-Net

題目背景 農民約翰被選為他們鎮的鎮長!他其中一個競選承諾就是在鎮上建立起網際網路,並連線到所有的農場。當然,他需要你的幫助。 題目描述 約翰已經給他的農場安排了一條高速的網路線路,他想把這條線路共享給其他農場。為了用最小的消費,他想鋪設最短的光纖去連線所有

小生成樹 P1547 Out of Hay

題目背景 奶牛愛乾草 題目描述 Bessie 計劃調查N (2 <= N <= 2,000)個農場的乾草情況,它從1號農場出發。農場之間總共有M (1 <= M <= 10,000)條雙向道路,所有道路的總長度不超過1,000,00

小生成樹 & P3366模板小生成樹 & P2820 局域網

圖片 最大 show bool sca 9.png www. pla ++ 嗯... 理解生成樹的概念: 在一幅圖中將所有n個點連接起來的n-1條邊所形成的樹。 最小生成樹: 邊權之和最小的生成樹。 最小瓶頸生成樹: 對於帶權圖,最大權值最小的生成樹。

BZOJ1937: [Shoi2004]Mst 小生成樹P4412)

二分圖完美匹配 神仙一樣。。。 首先有個顯然的貪心:樹邊權值只減不增,非樹邊權值只增不減。 對於一條連線xxx和yyy的非樹邊iii,xxx到yyy路徑上所有的邊jjj都要滿足wj−dj≤wi+diw_j-d_j\leq w_i+d_iwj​−dj​≤wi​+

P1547Out of Hay小生成樹

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

P4180 模板嚴格次小生成樹[BJWC2010]小生成樹

UC 註意 max code clu print etc using ios 嚴格次小生成樹模板 算法流程: 先用克魯斯卡爾求最小生成樹,然後給這個最小生成樹樹剖一下,維護邊權轉點權,維護最大值和嚴格次大值。 然後枚舉沒有被選入最小生成樹的邊,在最小生成樹上查一下這條邊的兩

P1546 網路 Agri-Net小生成樹_Prim)

傳送門 最小生成樹模板,大家都說是Kruskal,但brz大神說是稠密圖要用Prim。 由於大神很強我聽大神的 關於Prim演算法和Kruskal看這裡,我覺得他寫得很好 Code: #i

P1546 短網絡 Agri-Net小生成樹

pre div spa 鏈接 namespace tdi 我們 nbsp 個數字 嗯... 題目鏈接:https://www.luogu.org/problemnew/show/P1546 首先不難看出這道題的思想是用了最小生成樹,但是這道題有難點: 1.

小生成樹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個關系

練習賽補題poj 3026 Borg Maze bfs+小生成樹坑~

lec pro 起點 live tin put gets work cond Description The Borg is an immensely powerful race of enhanced humanoids from the delta quadrant

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個農場都互相相通,有一定的距離,現在每個農場需要裝光纖,問怎麽安裝光纖能將所有農場都連通起來,並且要使光纖距離最小,輸出安裝光纖的總距離。 思路: 又是一個最小生成樹,

動態規劃大正方形 ( P1387 大正方形)

代碼 log mar 最小 down 思路 計數 -m i++ 輸入格式: 輸入文件第一行為兩個整數n,m(1<=n,m<=100),接下來n行,每行m個數字,用空格隔開,0或1。 輸出格式: 一個整數,最大正方形的邊長。 輸入輸出樣例 輸入樣例: 4 4 0

並查集 小生成樹POJ2421&&HDU1102:Constructing Roads

post ges say his ble for 圖片 i++ clas Description There are N villages, which are numbered from 1 to N, and you should build some roa

luogu P3366 小生成樹 模板

break pos clas color nbsp main str long sin 這裏是kruskal做法 當然prim也可以,至於prim和kruskal的比較: Prim在稠密圖中比Kruskal優,Kruskal在稀疏圖中比Prim優。 1 #inc

BZOJ2654 tree 二分 + 小生成樹

ace spa line check esp 直接 sin inf log 題目 給你一個無向帶權連通圖,每條邊是黑色或白色。讓你求一棵最小權的恰好有need條白色邊的生成樹。 題目保證有解。 輸入格式 第一行V,E,need分別表示點數,邊數和需要的白色邊數。 接下來E行

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

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