今天重拾演算法複習。
今天學習了兩個型別的演算法——並查集與最小生成樹(mst)
簡單記錄一下並查集的大致內容。
一、並查集的內容大致作用為查詢當前圖中的點有幾個集合。
該演算法起到查詢分組的情況。通過給定的條件使用陣列記錄該點對應的父節點,倘若兩個點有相同的「祖先」,那他們肯定是屬於同乙個組的。
下面看幾道例題:
某省調查城鎮交通狀況,得到現有城鎮道路統計表,表中列出了每條道路直接連通的城鎮。省**「暢通工程」的目標是使全省任何兩個城鎮間都可以實現交通(但不一定有直接的道路相連,只要互相間接通過道路可達即可)。問最少還需要建設多少條道路?
測試輸入包含若干測試用例。每個測試用例的第1行給出兩個正整數,分別是城鎮數目n ( < 1000 )和道路數目m;隨後的m行對應m條道路,每行給出一對正整數,分別是該條道路直接連通的兩個城鎮的編號。為簡單起見,城鎮從1到n編號。注意:兩個城市之間可以有多條道路相通,也就是說
3 31 2
1 22 1
這種輸入也是合法的
當n為0時,輸入結束,該用例不被處理。
對每個測試用例,在1行裡輸出最少還需要建設的道路數目。示例1
複製
4 21 34 3
3 31 2
1 32 3
5 21 2
3 5999 0
0
複製
102給定乙個無向圖和其中的所有邊,判斷這個圖是否所有頂點都是連通的。998以及
每組資料的第一行是兩個整數 n 和 m(0<=n<=1000)。n 表示圖的頂點數目,m 表示圖中邊的數目。隨後有 m 行資料,每行有兩個值 x 和 y(0示例1複製4 3
1 22 3
3 23 2
1 22 3
noyes
這些題目屬於查詢結果的型別,相對基礎一些。而下面我們介紹下使用克魯斯卡爾來解最小生成樹的問題:
這些題目的思想是在並查集的基礎上進行延伸,一般來說是查詢當前圖中的最優解,此時我們也要使用組的概念,當兩個節點屬於同乙個組的時候,那麼這兩個點就不可以連通。
例如:某省調查鄉村交通狀況,得到的統計表中列出了任意兩村莊間的距離。省**「暢通工程」的目標是使全省任何兩個村莊間都可以實現公路交通(但不一定有直接的公路相連,只要能間接通過公路可達即可),並要求鋪設的公路總長度為最小。請計算最小的公路總長度。
測試輸入包含若干測試用例。每個測試用例的第1行給出村莊數目n ( < 100 );隨後的n(n-1)/2行對應村莊間的距離,每行給出一對正整數,分別是兩個村莊的編號,以及此兩村莊間的距離。為簡單起見,村莊從1到n編號。當n為0時,輸入結束,該用例不被處理。
對每個測試用例,在1行裡輸出最小的公路總長度。示例1
複製
31 2 1
1 3 2
2 3 4
41 2 1
1 3 4
1 4 1
2 3 3
2 4 2
3 4 5
0
複製
35
////created by 陳平 on 2018/6/5.
//#include
"iostream
"#include
"stdio.h
"#include
"algorithm
"using
namespace
std;
int tree[101
];struct
edgeedges[
6000
];int findroot(inta)}
bool
cmp(edge a,edge b)
intmain()
sort(edges+1,edges+n*(n-1)/2+1
,cmp);
for (int j = 1; j <=n ; ++j)
int ans=0
;
for (int k = 1; k < n*(n-1)/2; ++k)
}cout
}}
面對最小生成樹的問題,我們的思路是將輸入的路徑進行從小到大的排序,並以此取合適的路徑。
省**「暢通工程」的目標是使全省任何兩個村莊間都可以實現公路交通(但不一定有直接的公路相連,只要能間接通過公路可達即可)。現得到城鎮道路統計表,表中列出了任意兩城鎮間修建道路的費用,以及該道路是否已經修通的狀態。現請你編寫程式,計算出全省暢通需要的最低成本。
測試輸入包含若干測試用例。每個測試用例的第1行給出村莊數目n ( 1< n < 100 );隨後的 n(n-1)/2 行對應村莊間道路的成本及修建狀態,每行給4個正整數,分別是兩個村莊的編號(從1編號到n),此兩村莊間道路的成本,以及修建狀態:1表示已建,0表示未建。當n為0時輸入結束。
每個測試用例的輸出佔一行,輸出全省暢通需要的最低成本。示例1
複製
31 2 1 0
1 3 2 0
2 3 4 0
31 2 1 0
1 3 2 0
2 3 4 1
31 2 1 0
1 3 2 1
2 3 4 1
0
複製
310
////created by 陳平 on 2018/6/6.
//#include
"stdio.h
"#include
"iostream
"#include
"algorithm
"using
namespace
std;
int tree[101
];struct
edgeedges[
6000
];int findroot( inta)}
bool
cmp(edge a,edge b)
intmain()
int ans=0
;
for (int j = 1; j <=n*(n-1)/2 ; ++j)
}sort(edges+1,edges+1+n*(n-1)/2
,cmp);
for (int k = 1; k <=n*(n-1)/2 ; ++k)
}cout
}}
DAY8學習筆記
檔案操作的基本概念 開啟檔案的模式有三種純淨模式 r 預設的 w a。控制操作檔案內容格式的兩種模式 t 預設的 b。大前提 tb模式均不能單獨使用,必須與純淨模式結合使用。t文字模式 1.讀寫檔案都是以字串為單位的。2.只能針對文字檔案。3.必須指定encoding引數。b二進位制模式 1.讀寫檔...
java學習筆記day8
多型 定義 某一類事物的多種存在形式。例 動物中貓,狗。貓這個物件對應的型別是貓型別。貓 x new 貓 同時貓也是動物中的一種,也可以把貓稱為動物。動物 y new 貓 動物是貓和狗具體事物中抽取出來的父型別。父型別引用指向了子類物件。多型 可以理解為事物存在的多種體現形態。人 男人,女人。動物 ...
機器學習基礎DAY8
第八章 線性回歸 先從定義說起 誤差大小 sklearn線性回歸正規方程 梯度下降api sklearn.linear model.linearregression 正規方程 普通最小二乘線性回歸 coef 回歸係數 sklearn.linear model.sgdregressor 梯度下降 通過...