#include<cstdio> #include<cstring> #include<cstdlib> #include<algorithm> #include<queue> #include<vector> #include<stack> using namespace std; const int MAX = 1000000; int c[MAX]; int ans; int dfs(int root){ int l = root*2; int r = root*2 + 1; if (c[l] == 0 && c[r] == 0){ return c[root]; } int u = dfs(l); int v = dfs(r); ans += (max(u, v) - min(u,v)); c[root] = max(u, v) + c[root]; return c[root]; } int main(){ int n; while (scanf("%d",&n) != EOF){ memset(c, 0, sizeof(c)); ans = 0; int m = (1<<(n+1)) - 2; for (int i = 0; i<m; i++){ scanf("%d",&c[i+2]); } dfs(1); printf("%d\n",ans); } return 0; }
526B - Om Nom and Dark Park
最新推荐文章于 2016-12-01 22:02:23 发布