P15061 琥峪枫 题解
先全问一遍
放代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll ask(int u,int d);
ll solve(int id,int h){
int n=(1<<h)-1;
vector<ll> d1(n);
for(int i=0;i<n;i++)
d1[i]=ask(i+1,1);
vector<int> t2;
for(int i=1;i<n;i++)
if(!ask(i+1,h+1))t2.emplace_back(i);
if(t2.size()<3)t2.emplace_back(0);
vector<ll> v2(3);
int rt=-1;
ll c0=0;
for(int i=0;i<3;i++)
if(!(v2[i]=ask(t2[i]+1,h)))rt=t2[i];
else c0+=d1[t2[i]];
ll c1=v2[0]+v2[1]+v2[2]<<1;
return (accumulate(d1.begin(),d1.end(),0ll)+c1+(c0-ask(rt+1,2))/2)/3;
}