【最小生成樹】洛谷 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+
【洛谷P1547】Out 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 [【最小生成樹】+hdu2544【floyed】+hdu1874【dijdtra】~~~模板復習~~~
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