「Poetize10」能量擷取

來源:互聯網
上載者:User

標籤:des   style   blog   http   color   io   os   ar   for   

描述 Description“封印大典啟動,請出Nescafe魂珠!”隨著 聖主applepi一聲令下,聖劍護法rainbow和魔杖護法freda將Nescafe魂珠放置於封印台上。封印台是一個樹形的結構,魂珠放置的位置 就是根節點(編號為0)。還有n個其它節點(編號1~n)上放置著封印石,編號為i的封印石需要從魂珠上擷取Ei的能量。能量只能沿著樹邊從魂珠傳向封印 石,每條邊有一個能夠傳遞的能量上限Wi,魂珠的能量是無窮大的。作為封印開始前的準備工作,請你求出最多能滿足多少顆封印石的能量需求?
注意:能量可以經過一個節點,不滿足它的需求而傳向下一個節點。每條邊僅能傳遞一次能量。輸入格式 InputFormat第一行一個整數n,表示除根節點之外其它節點的數量。
接下來n行,第i+1行有三個整數Fi、Ei、Wi,分別表示i號節點的父節點、i號節點上封印石的能量需求、串連節點i與Fi的邊最多能傳遞多少能量。 題解:
感覺不會再愛了。。。想了好久,包括DP,網路流什麼的,最後碼了個n^4的背包,然後就棄療了,膜拜題解。。。
原來是貪心。。。
出題人:
每次選取能量需求最小的節點,掃描它到根節點的路徑上的邊的容量,看能否滿足,如果能滿足就把它到根節點的路徑上的邊的容量都減去它的需求即可。

本題如果把握不好貪心的正確性也可以寫樹狀動規(多叉樹,背包轉移),但是顯然編程複雜度就上升了一個層次。

正確性有待證明。。。

代碼:
 1 #include<cstdio> 2  3 #include<cstdlib> 4  5 #include<cmath> 6  7 #include<cstring> 8  9 #include<algorithm>10 11 #include<iostream>12 13 #include<vector>14 15 #include<map>16 17 #include<set>18 19 #include<queue>20 21 #include<string>22 23 #define inf 100000000024 25 #define maxn 1000026 27 #define maxm 500+10028 29 #define eps 1e-1030 31 #define ll long long32 33 #define pa pair<int,int>34 35 #define for0(i,n) for(int i=0;i<=(n);i++)36 37 #define for1(i,n) for(int i=1;i<=(n);i++)38 39 #define for2(i,x,y) for(int i=(x);i<=(y);i++)40 41 #define for3(i,x,y) for(int i=(x);i>=(y);i--)42 43 #define mod 100000000744 45 using namespace std;46 47 inline int read()48 49 {50 51     int x=0,f=1;char ch=getchar();52 53     while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();}54 55     while(ch>=‘0‘&&ch<=‘9‘){x=10*x+ch-‘0‘;ch=getchar();}56 57     return x*f;58 59 }60 int n,ans,fa[maxn],id[maxn],ned[maxn],mx[maxn];61 inline bool cmp(int x,int y){return ned[x]<ned[y];}62 63 int main()64 65 {66 67     freopen("input.txt","r",stdin);68 69     freopen("output.txt","w",stdout);70 71     n=read();72     for1(i,n)73     {74         fa[i]=read();ned[i]=read();mx[i]=read();id[i]=i;75     }76     sort(id+1,id+n+1,cmp);77     for1(i,n)78     {79         bool flag=0;80         for(int j=id[i];j;j=fa[j])81             if(mx[j]<ned[id[i]])flag=1;82         if(flag)continue;83         for(int j=id[i];j;j=fa[j])mx[j]-=ned[id[i]];84         ans++;85     }86     printf("%d\n",ans);87 88     return 0;89 90 }
View Code

「Poetize10」能量擷取

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.