考場上的時候被題目完全蒙住了,當時狀態也不好,前幾次考試每次考試當天就頭暈感冒流鼻涕
好的,以上都是藉口,自己沒有好好複習才是真的...
題目:
好的,以上題目簡述就是:給你乙個無向連通圖,求它的最小生成樹的最大邊,姐妹們,如果你們考場看懂了題目帶了資料結構書或者會krukal又怎麼不會得分呢?
我就是沒看懂題目得人啊!不過,通過我今天的驗證,發現就算我看懂了題目我也不一定得分,因為我執行錯誤orz...
就是簡單的使用了一下kruskal,整個演算法清晰易懂
1 #include2 #include3 #include4 #include5view codeusing
namespace
std;6//
第一次提交:執行錯誤,檢視**,沒啥問題啊???7//
第二次提交:修改max_vex = 10^5, 改為5 * 1e5 + 10 ,記住乘方的表示方法 8//
...9
//第八次提交,100分,修改seek函式,由原來的while迴圈變為條件遞迴呼叫!!!然後在找到輸出key的地方由原來條件判斷來查詢i,變成了最後直接計算查詢i
10//
姐妹們,要記住當整個測試資料很大的時候,即使你的計算即使if,但是放到while裡面,該大的資料還是大,我們盡量一點點摳時間總能給你節約出來
11const
int max_vex = 5*1e5 + 10;12
intset
[max_vex];
13 typedef struct
edgededges;
16 edges edgeset[2 *max_vex];
1718
bool
cmp(edges a,edges b)
2122
int seeks(int
v)25
26int kruskal(int n, int
m)31
int u = 0;//
u記錄連線的邊的數量,當u = n-1時,已經構造處一棵樹
32int
key;
33 i = 0;34
while(u < n-1
)41 i++;42}
43 i = i-1
;44 key =edgeset[i].w;
45return
key;46}
4748
intmain()
54 sort(edgeset+1,edgeset+m+1,cmp);//
對邊集陣列按權值公升序排序,其中n為元素個數,即圖的邊數
55int t =kruskal(n, m);
56 cout <
57return0;
58 }
為什麼說是求最小生成樹的最大邊呢?
1:先求每一層的最大邊
2:將所有層最大邊比較求最大邊
也就是求整棵樹的最大邊
那要節約時間當然是所用的邊的權值越小越好
假設最小生成樹的最大邊a不是題目所得最求生成樹最大邊b,即a > b,那麼就是存在比最小生成樹使用更小邊得到的生成樹,obviously,與最小生成樹的定義矛盾了,所以a <= b
therefore 我們需要求無向連通圖的最小生成樹
普遍使用的演算法是prim和kruskal,但是prim使用了鄰接矩陣來表示圖的關係,適用於邊數多頂點少的情況,但是這道題的頂點最大值上了10的5次方,很容易使用陣列越界,為了保險起見,我使用了kruskal,結構體占佔空間就好了
說一下我在提交答案時出現的錯誤,給大家乙個小小的經驗或者說是給我自己提個醒
乘方的表示:切記啊切記,不能直接表示10^4,而是使用1e4,最好大家開空間的時候往額定值大了開,這樣總比一不小心開小了好,由於這個錯誤,我報出了執行錯誤
執行超時:這時候已經得到70分了,但是超時了,所以我就去看看大佬們的**,一點一點去摳自己的時間,while迴圈裡的判斷拿出來,while變成遞迴呼叫,嗯,還是挺有用的
渣渣之開心~
201812 4 資料中心
題目要求求圖形成的樹的邊的最大值的最小值 好繞 總之是乙個貪心,可以通過貪心推導 不過推導完可以發現實際上就是在求最小生成樹 下面分別用不同的方法實現 kruskal演算法,用到了並查集 如下 include include include include define n 500001 using...
CCF 201812 4 資料中心
樣例輸入45 11 2 3 1 3 4 1 4 5 2 3 8 3 4 2 樣例輸出4 樣例說明 下圖是樣例說明。分析 第一眼看到題目,想著是超級複雜的圖論問題,看懂樣例後,就感慨為啥當初我考的時候遇不到這麼簡單的題目呢?把之前14年考過的乙個最優灌溉 複製一下,改幾行 幾分鐘就ac了。言歸正傳,題...
CCF CSP 201812 4 資料中心
題目的意思說白了就是找到乙個最小值k,使得用小於等於k的邊組成的圖是聯通的即可。二分這個k判定下就好了。第二種做法就是求mst裡面的最大邊就是答案。includeusing namespace std define pii pair define mp make pair const int max...