題目要求求圖形成的樹的邊的最大值的最小值(好繞)
總之是乙個貪心,可以通過貪心推導
(不過推導完可以發現實際上就是在求最小生成樹)
下面分別用不同的方法實現:
kruskal演算法,用到了並查集
**如下:
#include
#include
#include
#include
#define n 500001
using
namespace std;
struct node};
struct cmp};
struct unionfind
int root =
find_root
(my_union[id]);
//compress
my_union[id]
= root;
return root;
}int
union_root
(int r1,
int r2)};
intmain()
int count =0;
int max =0;
while
(count < n-1)
else
} cout
}
prim演算法其實和最短路徑的實現很像,唯一的區別就是在插入堆的時候,prim演算法插入的值為當前節點到更新節點邊的值;而最短路徑迪傑斯特拉插入的是從根到更新節點值的總和(乙個是區域性貪心,乙個是全域性貪心)
**如下:
#include
#include
#include
#include
#define n 500001
using
namespace std;
struct node};
struct cmp};
intmain()
//init
myheap.
push
(node
(r,0))
;//int count =0;
int max =0;
while
(count < n)
else}}
} cout
}
4511 2 2
1 3 4
1 4 5
2 3 1
3 4 2
201812 4 資料中心(kruskal)
考場上的時候被題目完全蒙住了,當時狀態也不好,前幾次考試每次考試當天就頭暈感冒流鼻涕 好的,以上都是藉口,自己沒有好好複習才是真的.題目 好的,以上題目簡述就是 給你乙個無向連通圖,求它的最小生成樹的最大邊,姐妹們,如果你們考場看懂了題目帶了資料結構書或者會krukal又怎麼不會得分呢?我就是沒看懂...
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...