poj2377 最大生成樹kruskal

2021-08-28 05:09:45 字數 630 閱讀 6703

題意:現在有乙個人給人修建一些線路,(當然,我們想要少花錢消費,人家就想多多賺你的錢了,現在就給出這麼乙個問題)。讓你求修得所有電路能賺取的最大利潤,若電路不能被全部修完,輸出「-1」.

思路:其實只是一道kruskal的模板題,但是他求的是最大生成樹,只要一開始排序的時候把邊從大到小排即可(或者prim演算法每次都取距離最大邊),由於kruskal的演算法複雜度大概為o(eloge)故此處選擇更好。

#include#include#include#includeusing namespace std;

int cnt,fa[1009],n,m;

struct node

s[20009];

bool cmp(node a,node b)

int find(int x)

void kruskal()

if(cnt!=n-1) printf("-1\n");

else printf("%d\n",ans);

}int main()

sort(s,s+m,cmp);

kruskal();

} return 0;

}

POJ 2377 最大生成樹

每日一看 題意 現在有乙個人給人修建一些線路,當然,我們想要少花錢消費,人家就想多多賺你的錢了,現在就給出這麼乙個問題 讓你求修得所有電路能賺取的最大利潤,若電路不能被全部修完,輸出 1 分析 最小生成樹模板改一改就好啦 include include include using namespace...

poj2377解題報告

題目大意 有n個點 穀倉 有m條路,以及他們的造價,找到最大的造價,其中每乙個穀倉要能夠到到達其他的任意乙個穀倉。解題思路 mst最大生成樹,其中需要注意的是要保證連通性,這一點把並查集遍歷一遍,看是否有乙個以上的代表元即可。include include include includeusing ...

POJ 3723 最大生成樹

天啦嚕t t。稍微的分析看得出這個招募順序是乙個森林,然後想不到是最大生成樹。很裸。每乙個關係就是兩個點加一條邊,構建乙個最大生成樹,每次檢查兩個點是否招募了,不管兩個點是只有乙個沒招募還是兩個都沒招募,都是新增到最大生成樹中去,然後這樣都會節省出d的錢。最後用總錢數減去節省的錢就行了。includ...