標籤: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」能量擷取