BZOJ5329 SDOI2018 戰略遊戲

2021-09-03 02:23:35 字數 1211 閱讀 4437

補的第一道sdoi2018?

圓方樹上建虛樹 歡樂多又多【大霧

大概就是求對於s個點 問刪掉乙個點使它們不完全連通的方案數

那麼我們可以看出 這個其實就是求兩兩路徑並上的割點數量

那麼 圓方樹來解決是最好的辦法【好像也沒有別的辦法

然後我們發現如果兩兩統計lca的話,複雜度是s^2無法接受

可以看出 這個過程和虛樹的構建過程十分相似

所以 我們就可以建出虛樹 統計答案即可

附**。

#include#include#include#include#include#define inf 20021225

#define ll long long

#define mxm 200100

#define mxn 100100

using namespace std;

struct edgep[mxm<<1],t[mxm<<1],e[mxm<<1];

// p 原圖 t 虛樹 e 圓方樹

int ip[mxn],it[mxn<<1],in[mxn<<1];

int cnp,cntt,cnt,pt,poi[mxm],n,m;

int dfn[mxn<<1],low[mxn],dep[mxn<<1],tot;

int f[mxn<<1][20],g[mxn<<1];

int stk[mxn<<1],num;bool spc[mxn<<1];

// 注意不要用混!!!

void add(int x,int y)

void att(int x,int y)//只建兒子邊

stacktt;

void tarjan(int x,int ff)

while(tmp!=y);

}} else

low[x]=min(low[x],dfn[y]); }}

void dfs(int x)

}void maketree()//建圓方樹

int lca(int x,int y)

else if(dfn[z]1) att(stk[stk[0]-1],stk[stk[0]]),stk[0]--;

}void query(int x)

spc[x]=0;

}void init()

int main()

} return 0;

}

bzoj 5329 Sdoi2018 戰略遊戲

n個點m條邊,每次給出乙個點集,可以刪掉乙個非點集中的點,問有多少刪法使得存在兩個點集中的點不連通。建出圓方樹的虛樹,顯然刪去上面的圓點是合法的。直接搞就好了。code include include include include include include using namespace s...

bzoj 5329 Sdoi2018 戰略遊戲

省選臨近,放飛自我的小q無心刷題,於是慫恿小c和他一起頹廢,玩起了一款戰略遊戲。這款戰略遊戲的地圖由n個城市以及m條連線這些城市的雙向道路構成,並且從任意乙個城市出發總能沿著道路走到 任意其他城市。現在小c已經占領了其中至少兩個城市,小q可以摧毀乙個小c沒占領的城市,同時摧毀所有連線這 個城市的道路...

bzoj5329 圓方樹 虛樹 戰略遊戲

description 省選臨近,放飛自我的小q無心刷題,於是慫恿小c和他一起頹廢,玩起了一款戰略遊戲。這款戰略遊戲的地圖由n個城市以及m條連線這些城市的雙向道路構成,並且從任意乙個城市出發總能沿著道路走到 任意其他城市。現在小c已經占領了其中至少兩個城市,小q可以摧毀乙個小c沒占領的城市,同時摧毀...