#$description$
[題面](
給你一張$n$個節點的樹和乙個遍歷的順序,必須按照順序走,求每個點被經過多少次,最後到達的點不計算次數
#$solution$
樹上差分的裸題,只需要做點差分就行了。
對於路徑上相鄰兩點做點差分會發現有的點被統計兩次,所以對於第$2-(n-1)$個經過的點標記一下,最後$dfs$的時候先讓被標記的點$ans[i]=cf[i],ans[i]--$即可,為什麼不讓$cf[i]--$?因為我們計算的$cf[i]$一定是合法的,只有中轉點因為統計兩次,所以繼續傳下去是對的,最後別忘了讓最後到達的點$ans--$,因為最後的點不計算次數
#$code$
```#include#include#include#include#define re register
#define maxn 300010
using namespace std;
inline int read()
while(ch>='0'&&ch<='9')
return x*f;
}struct edgee[maxn<<2];
int a[maxn],x,y,fat[maxn],vis[maxn];
int cf[maxn],ans[maxn],tmp,dep[maxn],head[maxn],cnt;
int n,m,lg[maxn],num,f[maxn][23];
inline void add(int u,int v)
void pre()
void dfs(int u,int fa)
return f[x][0];
}void dfs2(int u,int fa)
ans[u]=cf[u];
if(vis[u]) ans[u]--;
}int main()
{n=read();
for(re int i=1;i<=n;++i) a[i]=read();
for(re int i=1;i
洛谷P3258松鼠的新家
松鼠的新家是一棵樹,前幾天剛剛裝修了新家,新家有n個房間,並且有n 1根樹枝連線,每個房間都可以相互到達,且倆個房間之間的路線都是唯一的。天哪,他居然真的住在 樹 上。松鼠想邀請小熊維尼前來參觀,並且還指定乙份參觀指南,他希望維尼能夠按照他的指南順序,先去a1,再去a2,最後到an,去參觀新家。可是...
洛谷P3258松鼠的新家
題目傳送門 恩,很明顯的乙個樹剖題,配合樹上差分其實也並不難,不過無奈蒟蒻樹剖還沒那麼熟練,而且樹上差分也做的少,所以這題愣是做了一中午。唉,果然我還是太菜了。恩,具體做法在 中解釋吧 it is made by holselee on 6th jan 2018 include include in...
P3258 JLOI2014 松鼠的新家
松鼠的新家是一棵樹,前幾天剛剛裝修了新家,新家有n個房間,並且有n 1根樹枝連線,每個房間都可以相互到達,且倆個房間之間的路線都是唯一的。天哪,他居然真的住在 樹 上。松鼠想邀請 前來參觀,並且還指定乙份參觀指南,他希望 能夠按照他的指南順序,先去a1,再去a2,最後到an,去參觀新家。可是這樣會導...