暗 鎖 樹上LCA 樹上差分

2022-02-15 22:03:48 字數 1984 閱讀 2492

傳說中的暗之連鎖被人們稱為 dark。

dark 是人類內心的黑暗的產物,古今中外的勇者們都試圖打倒它。

經過研究,你發現 dark 呈現無向圖的結構,圖中有 n 個節點和兩類邊,一類邊被稱為主要邊,而另一類被稱為附加邊。

dark 有 n – 1 條主要邊,並且 dark 的任意兩個節點之間都存在一條只由主要邊構成的路徑。

另外,dark 還有 m 條附加邊。

你的任務是把 dark 斬為不連通的兩部分。

一開始 dark 的附加邊都處於無敵狀態,你只能選擇一條主要邊切斷。

一旦你切斷了一條主要邊,dark 就會進入防禦模式,主要邊會變為無敵的而附加邊可以被切斷。

但是你的能力只能再切斷 dark 的一條附加邊。

現在你想要知道,一共有多少種方案可以擊敗 dark。

注意,就算你第一步切斷主要邊之後就已經把 dark 斬為兩截,你也需要切斷一條附加邊才算擊敗了 dark。

第一行包含兩個整數 n 和 m。

之後 n – 1 行,每行包括兩個整數 a 和 b,表示 a 和 b 之間有一條主要邊。

之後 m 行以同樣的格式給出附加邊。

輸出乙個整數表示答案。

n≤100000,m≤200000,資料保證答案不超過231−1
4 1 

1 2

2 3

1 4

3 4

```text

輸出樣例:

```text

3

附加邊會產生環,

對於環外的邊直接斬斷, 附加邊隨便

對於環上的邊, 如果這條邊在兩個環以上, 那麼要站短多條附加邊才可, 貢獻為零

對於環上, 只在乙個環上, 那麼就斬掉這條邊, 再把響應附加邊斬斷, 貢獻為1

那就統計每條邊在多少個環上唄, 附加邊連線 (x, y), 那麼 x, y 到 lca(x, y)上的邊環數+1

我們直接樹上差分, 讓 x, y的 value + 1, lca(x, y)的 value -= 2, 深度遍歷算就行了

#include #define all(n) (n).begin(), (n).end()

#define se second

#define fi first

#define pb push_back

#define mp make_pair

#define sqr(n) (n)*(n)

#define rep(i,a,b) for(int i=a;i<=(b);++i)

#define per(i,a,b) for(int i=a;i>=(b);--i)

#define io ios::sync_with_stdio(0); cin.tie(0);

using namespace std;

typedef long long ll;

typedef pairpii;

typedef pairpll;

typedef vectorvi;

typedef double db;

const int n = 1e5 + 5;

int n, m, _, k, t;

int h[n], to[n << 1], ne[n << 1], co[n << 1], tot;

int f[n][20], d[n], dist[n], cnt[n];

queueq;

void add(int u, int v, int c)

void bfs(int s)

}}int lca(int x, int y)

void dfs(int u, int fa)

}int main()

bfs(1);

rep (i, 1, m)

dfs(1, 0);

cout << k;

return 0;

}

暗 鎖(樹上差分)

傳說中的暗之連鎖被人們稱為 dark。dark 是人類內心的黑暗的產物,古今中外的勇者們都試圖打倒它。經過研究,你發現 dark 呈現無向圖的結構,圖中有 n 個節點和兩類邊,一類邊被稱為主要邊,而另一類被稱為附加邊。dark 有 n 1 條主要邊,並且 dark 的任意兩個節點之間都存在一條只由主...

Lca 樹上差分

暗 鎖 color 如圖,如何使標記的邊的覆蓋次數 c 我們把邊權看成是其子樹下所有點權之和,如果我需要增加x到p與y到p之間的邊權,p lca x,y 那麼只需要將x標記為x c,y標記為y c,p標記為p 2c 做完以上的操作,最後對整個樹求一遍dfs即可,該過程模擬於求字首和 include ...

acwing352樹上差分 lca

主要題意就是先給你乙個最小生成樹然後一些附加的邊 你要從最小生成樹里取一條邊 然後附加邊裡取一條 使 這個連通塊分成兩個連通塊 首先來看看樣例 三種取法 是圖中的三種顏色的取法法 如果圖變成這個樣子 要使圖從 1 2這條邊 變成兩個連通塊 你會發現 1 2 4 1 是乙個環 1 2 3 4 1又是乙...