luogu P1600 天天愛跑步

2022-05-04 13:39:11 字數 918 閱讀 8806

膜你賽t3考了這題的簡化版,當場自閉。就此把此類題目總結一下。

膜你賽題意是這樣的:相當於這個題最後問每個運動員被多少個觀察員觀察到。我們考慮把每條路徑拆成向上和向下兩條,本質相同,我們以向上路徑舉例。發現路徑上滿足 \(dep[s]-dep[x]=x\)(\(s\) 表示路徑起點) 的 \(x\) 都可以獲得 \(1\) 的貢獻。我們差分一下,最後再一遍 \(dfs\) 統計答案(離線)就行了。

這個題和膜你賽題的區別呢,就是此題是乙個標記對根到它產生貢獻,所以最後統計答案的時候是統計子樹。現在有個非常騷的操作:統計差值。由於我們提前知道了我們要求的量是什麼,我們可以在 \(dfs\) 開始的時候記錄這個初值,在 \(dfs\) 結束時看看這個值現在長什麼樣子,最後取個差就是我們想要的貢獻了。這個 trick 好像以前也見過,但因為記憶力低下考場上並沒有想起來什麼。

**:

#include#include#include#include#includeusing namespace std;

const int n=300009;

int n,m,head[n],cnt,x[n],y[n],w[n],p[n],dep[n],f[n][30],l[n],tax[n*4],ans[n];

struct edge

g[n*2];

vector > b[n];

void add(int from,int to)

void init()

void dfs(int x,int fa)

ans[x]+=qwq-tax[p[x]];

}void work()

dfs(0,-1);

for (int i=1;i<=n;i++)

printf("%d ",ans[i]);puts("");

}int main()

luogu P1600 天天愛跑步

傳送門 1a此題暴祭 下面記點 x 深度為 de x 某個時間點記為 w x 首先,每條路徑是可以拆成往上和往下兩條路徑的 對於往上的路徑,假設有個人往上跑,w y 在點 y 那麼如果能對點 x 的觀察員產生貢獻,當且僅當 w x de x w y de y 對於往下的路徑,假設有個人往下跑,w y...

luogu P1600 天天愛跑步 LCA

luogu p1600 noip 2016 天天愛跑步 題目描述 小c同學認為跑步非常有趣,於是決定製作一款叫做 天天愛跑步 的遊戲。天天愛跑步 是乙個養成類遊戲,需要玩家每天按時上線,完成打卡任務。這個遊戲的地圖可以看作一一棵包含n個結點和n 1條邊的樹,每條邊連線兩個結點,且任意兩個結點存在一條...

洛谷 P1600 天天愛跑步

題面就不貼上了 把每個玩家的路徑拆成一條到lca的路徑和從lca到終點的路徑 然後,使用樹上差分統計答案即可 那麼,樹上差分是什麼?差分的具體思想是,當某區間內某元素對答案有貢獻,就在區間起點打乙個 1 標記代表多出了乙個對答案有貢獻的元素,在終點打乙個 1標記代表乙個對答案有貢獻的元素在該位置 結...