天天愛跑步

2022-07-19 10:03:10 字數 2013 閱讀 5818

暴力程式(25pts) 複雜度\(o(n^2)\)

#includeusing namespace std;

const int maxn=3e5+10;

int n,m,ans[maxn];

inline int read()

while(c>='0'&&c<='9')

return x*f;

}int beg[maxn],nex[maxn<<1],to[maxn<<1],e;

inline void add(int x,int y)

int dep[maxn],f[maxn][20];

inline void dfs(int x,int fa)

}inline int lca(int x,int y)

return f[x][0];

}int s[maxn],t[maxn],anc[maxn],w[maxn];

int main()-(dep[t]-dep[x])=w[x]\)時才能觀察到,即\(dis_-dep[t]=w[x]-dep[x]\)

注意:若\(dep[lca]+w[lca]=dep[s]\)則\(lca\)會被計算兩次,需減去一次。

由於等式兩邊無直接聯絡,考慮使用線段樹合併。

注意:在\(dep[x]時,\(x\)不在\(s->t\)上,故應在\(f[lca]\)處消除這一條邊的貢獻,其思想類似於樹上差分。

完整**如下: 複雜度\(o(n\log n)\)

#includeusing namespace std;

const int maxn=3e5+10;

int n,m,ans[maxn];

inline int read()

while(c>='0'&&c<='9')

return x*f;

}int beg[maxn],nex[maxn<<1],to[maxn<<1],e;

inline void add(int x,int y)

int dep[maxn],f[maxn][20];

inline void dfs(int x,int fa)

}inline int lca(int x,int y)

return f[x][0];}/*

if x on s->lca dep[x]+w[x]=dep[s]

if x on lca->t dis-(dep[t]-dep[x])=w[x]

=>dis-dep[t]+n=w[x]-dep[x]+n

*/struct nodetr[maxn*50];

int cnt,rt[maxn];

inline int update_s(int h,int l,int r,int x,int y)

inline int update_t(int h,int l,int r,int x,int y)

int anc[maxn],dis[maxn],w[maxn];

inline int merge(int s,int t,int l,int r)

int mid=(l+r)>>1;

tr[s].l=merge(tr[s].l,tr[t].l,l,mid);

tr[s].r=merge(tr[s].r,tr[t].r,mid+1,r);

return s;

}inline int query_s(int h,int l,int r,int x)

inline int query_t(int h,int l,int r,int x)

inline void solve(int x,int fa)

ans[x]+=query_s(rt[x],0,2*n,dep[x]+w[x]);

ans[x]+=query_t(rt[x],0,2*n,w[x]-dep[x]+n);

}int s[maxn],t[maxn];

int main(){

n=read(),m=read();

int x,y;

for(int i=1;i深深地感到自己的弱小。

跑步愛天天

對於 50 的資料 直接模擬 對於另外10 的資料 因為地圖是一條鏈,顯然 yousiki 會消滅所有距離他為偶數條邊的祖 先。對於100 的資料 我們先把整個樹 dfs 一遍,遇到乙個點就把這個點記錄到乙個陣列後邊,即求出了樹的尤拉序,顯然如果不考慮迴圈的話,guard是在這個序列上每次往後走乙個...

天天愛跑步

一道 樹上差分 lca 桶的題 說實話,這道題放在d1t2就是非常不合理的。然而ccf就是放了,並且還是能依靠csp撈錢,你也必須交錢參加比賽。這個社會是多麼的不公啊!閒扯結束 顯然如果對每條路徑都進行一次處理,複雜度不對。考慮對路徑進行一次預處理,然後進行統一的計算答案。我們發現當一條路徑對某乙個...

天天愛跑步

終於拿下noip最難一題 看別人的題解看不懂 於是準備寫一篇更通俗易懂雜亂無章的題解 樹上差分 線段樹 桶 lca 將每條路徑在lca處切成上公升路徑和下降路徑 會發現對於x號觀察員若觀察到玩家i 則必有dep i w x depx 或dep i 2 dep lca w x depx 我們用桶標記 ...