題意:
在一副圖中,搞n-1條邊,使得每個點都相連,
有多種可能的情況,所以求一種使得其中n-1條邊的最大是所有可能的最小,然後並保證連線的n-1條邊的權值總和最大
思路:
一開始沒有看清題意,隨便寫了一發「最大生成樹」連案例都跑不出,原來還有個條件是有n-1條邊中的最大值是所有可能的最小。
然後窩就納悶了。。。怎麼搞法搞到一條最大的最小,隨便搞了個最小生成樹,寫著寫著發現其實最小生成樹里的最大邊,其他生成樹就是包含的。
那麼找到這條邊,跑一下最大生成樹就好了;
最小生成樹利用並查集比較好~
#include
using namespace std;
typedef long long ll;
const ll inf=0x3f3f3f3f;
const int n=1e5+10;
struct asd;
asd q[n*4];
bool cmp1(asd a,asd b)
int pre[n];
intm,n;
int find(int
x) int i=x,j;
while(pre[i]!=r)
return r;
}int main()
}for(int i=0;i}
sort(q,q+k,cmp2);
ll ans=0;
for(int i=1;i<=n;i++)
pre[i]=i;
for(int i=0;iint aa=find(q[i].x);
int bb=find(q[i].y);
if(aa!=bb)
}printf("%lld\n",ans);
return
0;}
51nod 1640最小生成樹 最大生成樹
思路 首先對全圖求一次最小生成樹,最出來生成樹的自大邊便是所有情況中最小的 因為kruscal和prime每次選邊都是選從小選到大 然後再從最大的邊從大到小開始列舉最大生成樹,求出權值和即可。include include include includeusing namespace std con...
51 nod 1640天氣晴朗的魔法(最小生成樹)
這樣陰沉的天氣持續下去,我們不免擔心起他的健康。51nod魔法學校近日開展了主題為 天氣晴朗 的魔法交流活動。n名魔法師按陣法站好,之後選取n 1條魔法鏈將所有魔法師的魔力連線起來,形成乙個魔法陣。魔法鏈是做法成功與否的關鍵。每一條魔法鏈都有乙個魔力值v,魔法最終的效果取決於陣中所有魔法鏈的魔力值的...
51nod 1640 天氣晴朗的魔法 最小生成樹
1640 天氣晴朗的魔法 51nod魔法學校近日開展了主題為 天氣晴朗 的魔法交流活動。n名魔法師按陣法站好,之後選取n 1條魔法鏈將所有魔法師的魔力連線起來,形成乙個魔法陣。魔法鏈是做法成功與否的關鍵。每一條魔法鏈都有乙個魔力值v,魔法最終的效果取決於陣中所有魔法鏈的魔力值的和。由於逆天改命的魔法...