JZOJ 5406. 【NOIP2017提高A组模拟10.10】Tree
生活随笔
收集整理的這篇文章主要介紹了
JZOJ 5406. 【NOIP2017提高A组模拟10.10】Tree
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Description
給定一顆n 個點的樹,樹邊帶權,試求一個排列P,使下式的值最大
其中maxflow(s; t) 表示從點s 到點t 之間的最大流,即從s 到t 的路徑上最小的邊權
Input
第一行一個整數n,表示點數
下接n - 1 行,每行三個數u, v, w 表示一條連接點u 和點v 權值為w 的邊
Output
輸出一行一個整數,表示答案
Sample Input
2
1 2 2333
Sample Output
2333
Data Constraint
對于前5% 的數據滿足n <= 8
對于前40% 的數據滿足n <= 200
對于前60% 的數據滿足n <= 2000
對于100% 的數據滿足n <= 100000
Solution
你絕對不會想到這道題的結論有多么簡潔!——答案為所有邊的邊權和!
什么?為什么呢?
首先,我們不能避免計算最短邊的答案,總會經過的。
同樣,次短邊也要加進去,因為 N 個點的排列不得不經過這條邊。
同理,第三小、第四小……最大邊,都要加入答案,因為答案為 n?1 條邊之和。
-于是——答案為所有邊的邊權和。
Code
#include<cstdio> using namespace std; long long ans; inline int read() {int X=0,w=1; char ch=0;while(ch<'0' || ch>'9') {if(ch=='-') w=-1;ch=getchar();}while(ch>='0' && ch<='9') X=(X<<3)+(X<<1)+ch-'0',ch=getchar();return X*w; } int main() {int n=read();while(--n){read(),read();ans+=read();}printf("%lld",ans);return 0; }總結
以上是生活随笔為你收集整理的JZOJ 5406. 【NOIP2017提高A组模拟10.10】Tree的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JZOJ 5401. 【NOIP2017
- 下一篇: JZOJ 5404. 【NOIP2017