貪心
我們很容易想到從第一層開始,每次染權值最大的乙個節點,但是我們可以構造出乙個數,讓乙個權值很小的點下面有權值很大的節點,所以我們考慮的貪心思路是樹中除了根節點外的權值最大的節點,它的父節點染色之後一定會被馬上染色,所以我們可以將權值最大的點和它的父節點進行合併,合併得到的新點的權值是這兩個點之和的平均值,這樣就一直合併,直至合併到乙個點的時候,我們就按照這個點合併的順序染色就是正確的答案了。
ac**
#include #include using namespace std;
long long r,n;
long long i,j,now,ans,a,b,father;
struct node
num[1010];
long long find()
} return ans;
}int main()
for(int i=1;i<=n-1;i++)
for(int i=1;i<=n-1;i++)
num[father].c+=num[now].c;
num[father].t+=num[now].t;
num[father].w=(double)(num[father].c)/num[father].t;
} cout 題目鏈結 大佬部落格的講解非常詳細,學習了 詳細思路見上方部落格或者李煜東 演算法競賽高階指南 include include include using namespace std define rep i,a,b for int i a i b i define for i,a,b for in... poj 2054 題意 給你一棵樹 然後給你根節點 其他節點染色的條件是父節點一定要被染色 我們知道如果父節點不需要被染色 那麼很簡單 貪心就好了 但是如果父親節點需要染色 我們利用前面的性質 大點值一定是跟在父節點後面的 所以我們考慮 x y是一起的 那麼 x y z 和z x y 分別是 x 2... 不得不說,這題是讓我飽受折磨,畢竟第一次做貪心演算法,而且wa了好多次,幸好有學長的幫助,最終找到了問題所在,是在快排上是問題,double高位不可向int低位轉換,由於一開始強制轉換導致雖然樣例和其他的測試資料過了,但還是wa,現在改完了就對了,附上ac ps 這題通過率是22 真心不簡單 如下 ...題解 poj2054 複雜的貪心
POJ 2054 有難度的貪心
poj解題報告 1328