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