雖然有心裡在想一些奇奇怪怪的事情的原因,不過還是寫太久了..
不過這個題本身也挺厲害的
注意第乙個被點亮的是任意選的,我最開始壓根沒注意到
\(dp_\)代表\(i\)號點子樹最後連出去的乙個點連的是它第\(j\)層的祖先
\(f_\)代表\(i\)號點子樹最後連出去的乙個點連的是它第\(j\)層祖先的另乙個兒子
然後我們就可以拼子樹,做換根了
要討論只有乙個兒子的情況
code:
#include #include #include #include #define ll long long
const int n=2e5+10;
using std::min;
template void read(t &x)
ll dp[2][n][20],a[n],edge[n],ans=1e18;
int n,log[n];
#define ls (id<<1)
#define rs (id<<1|1)
void dfs(int id)
else if(ls<=n)
}}void dfs0(int id,ll cost)
else if(ls<=n)
dfs0(ls,edge[id]*a[id>>1]+cost);
}int main()
} dfs(1);
dfs0(1,0);
printf("%lld\n",ans);
return 0;
}
2019.2.27 SCOI2015 小凸玩密室
演算法難度5,思維難度7,難度6 給定一棵n nn個點的完全二叉樹,樹邊帶權,點帶val x val x val x 的權值。定義兩個點的距離dis u,v dis u,v dis u,v 為u uu到v vv的最短路徑上經過的邊權之和。你一開始可以選擇乙個起始點,並點亮這個點,這一步不需要花費。你...
SCOI2015 小凸玩密室
題目描述 小凸和小方相約玩密室逃脫,這個密室是一棵有 n 個節點的完全二叉樹,每個節點有乙個燈泡。點亮所有燈泡即可逃出密室。每個燈泡有個權值 a i 每條邊也有個權值 b i 點亮第 1 個燈泡不需要花費,之後每點亮乙個新的燈泡 v 的花費,等於上乙個被點亮的燈泡 u 到這個點 v 的距離 d u,...
SCOI2015 小凸玩矩陣
題目很明顯的乙個事情,求第 k 大的最小值,一般採用的做法是二分 有人會問,但是不滿足二分性啊,接著往下看 考慮二分答案,但是如何檢驗 mid 是對還是錯,考慮每次只能取 mid 的數字,如果能取到 n k 1 個數字以上就可以,至於看能否取到 n k 1 個,採用二分圖匹配,左邊的點是行,右邊的點...