洛谷 P2358 松鼠的新家 樹上差分

2021-09-26 22:17:48 字數 846 閱讀 6687

給出乙個n≤3

e5

n\leq3e5

n≤3e

5的樹,然後給你n≤3

e5

n\leq3e5

n≤3e

5個目的地,每次途徑過新的地方都要消耗1

11能量,求問最後每個位置至少要多少能量。把每次走的過程都看成一條樹鏈,除了中間連線的結點多算了一次,可以留到最後處理。

剩下來的操作就是對一條鏈+1+1

+1,由於只有最後才有查詢,可以樹上差分代替樹剖。

#includeusing namespace std;

typedef long long ll;

const int inf=0x3f3f3f3f;

const ll inf=long_long_max;

const int n=3e5+7;

vectorg[n];

int a[n];

int fa[n][21];

int dep[n];

int cnt[n];

void dfs(int u,int f,int d)

} return fa[x][0];

}void dfs2(int u,int f)

} int main()

dfs(1,0,1);

for(int i=1;idfs2(1,0);

cnt[a[1]]++;

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

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

printf("%d\n",cnt[i]);

return 0;

}

松鼠的新家 樹上差分

松鼠的新家是一棵樹,前幾天剛剛裝修了新家,新家有n個房間,並且有n 1根樹枝連線,每個房間都可以相互到達,且倆個房間之間的路線都是唯一的。天哪,他居然真的住在 樹 上。松鼠想邀請小熊維尼前來參觀,並且還指定乙份參觀指南,他希望維尼能夠按照他的指南順序,先去a1,再去a2,最後到an,去參觀新家。可是...

洛谷P3258松鼠的新家

松鼠的新家是一棵樹,前幾天剛剛裝修了新家,新家有n個房間,並且有n 1根樹枝連線,每個房間都可以相互到達,且倆個房間之間的路線都是唯一的。天哪,他居然真的住在 樹 上。松鼠想邀請小熊維尼前來參觀,並且還指定乙份參觀指南,他希望維尼能夠按照他的指南順序,先去a1,再去a2,最後到an,去參觀新家。可是...

洛谷P3258松鼠的新家

題目傳送門 恩,很明顯的乙個樹剖題,配合樹上差分其實也並不難,不過無奈蒟蒻樹剖還沒那麼熟練,而且樹上差分也做的少,所以這題愣是做了一中午。唉,果然我還是太菜了。恩,具體做法在 中解釋吧 it is made by holselee on 6th jan 2018 include include in...