膜你賽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標記代表乙個對答案有貢獻的元素在該位置 結...