終於調完了,了了自己的乙個心結。
暫時不寫題解,下面的**應該還有優化的空間,各種意義上
更新——更加優秀的**。。
#include
#include
#include
#include
#include
using
namespace
std;
inline
void read(int &res)
const
int n = 300000;
int n,m,deep[n],sz[n],top[n],fa[n],son[n],cnt1[n],cnt2[n],f1[n<<1],f2[n<<1];
int w[n],sum[n],t[n],z[n<<1],ans[n];
vector
e[n],l[n],m[n];
void dfsf(int u)
void insert(int u)
else
if (m[u][i]==1)cnt2[f2[l[u][i]]]++;
else cnt1[f1[l[u][i]+n]]++;
}void dfst(int x)
int lca(int x,int y)
return deep[x]int main()
dfst(1);
for(int i=1;i<=n;i++)printf("%d ",ans[i]);
return
0;}
天天愛跑步NOIP
首先,我們考慮對於一條路徑 從x y,可以把它拆分成兩部分,圖中用虛線分開,然後這條路徑就變成了x lca,son lca y 先來考慮從x向上走到lca的路徑,對於這條路上的節點i,玩家能對節點i產生貢獻的前提是deep x w i deep i 移項可得deep x w i deep i 也就是...
洛谷1600 天天愛跑步(樹鏈剖分)
哇這真的是day1t2嗎。感覺要被強行勸退了。qwq 首先對於樹上的路徑s t,我們都可以將其拆為s lca s,t t,我們用dona陣列作為記錄貢獻的桶。考慮乙個點i能被觀察到的情況,分為兩種 1.存在一條路徑s lca s,t 且depth i val i 即原題的w depth s 2.存在...
NOIP2016 天天愛跑步 樹上差分 dfs
題目大意 給你一顆樹,樹上每個點都有乙個觀察員,他們僅會在 w i 時刻出現,觀察正在跑步的玩家 一共有m個玩家,他們分別從節點 s i 同時出發,以每秒跑一條邊的速度,沿著到 t i 的唯一路徑向節點t i 奔跑 如果一名玩家已經到達了終點,那麼在他到達終點之後出現在終點的觀察員不會觀察到他 但如...