解題 SDOI2018 戰略遊戲

2022-09-19 07:30:10 字數 1222 閱讀 2730

題面

先圓方樹然後建虛樹,答案就是虛樹大小。虛樹沒必要建出來,把原來的點的點權設為1,直接dfs序排序後相鄰點求距離加上首尾兩個點的距離,最後除以二(畫一下可以發現是正反算了兩遍),注意還要去掉詢問點和補上首尾兩個點的lca

1 #include2 #include3 #include4 #include5

#define vint vector6

#define vit vector::iterator

7using

namespace

std;

8const

int n=200005,m=800005;9

intt,n,m,c,q,o,t1,t2,rt,pt,cnt,cnt,tot;

10int

dfn[n],low[n],stk[n],isc[n],col[n];

11int

p[n],noww[m],goal[m],p[n],noww[m],goal[m];

12int

siz[n],dep[n],fth[n],imp[n],top[n],qry[m],dis[n]; vint pbc[n];

13void link(int f,int

t)14

20void linka(int f,int

t)21

27bool cmp(int a,int

b)28

31void

init()

3242

void rtpbc(int

nde)

43while(tep!=g);

59pbc[c].push_back(nde);60}

61}62else low[nde]=min(low[nde],dfn[g]);63}

64void dfs(int nde,int far,int

dth)

6575}76

void mark(int nde,int

upt)

7785}86

int lca(int x,int

y)87

93return dep[x]x:y;94}

95int dist(int x,int

y)96

100int

main()

101122

}123

return0;

124 }

view code

SDOI2018 戰略遊戲

給定一張 n 個點 m 條邊的無向聯通圖,共有 q 次操作,每次操作選擇一些點作為關鍵點,詢問有多少個點滿足刪去該點及與其相鄰的邊後,至少有兩個關鍵點不能互相到達。n,q leq 10 5,m leq 2 cdot 10 5,sum s leq 2 cdot 10 5 還是挺簡單的。就是圓方樹 虛樹...

SDOI2018 戰略遊戲

題目 圓方樹其實並沒有那麼難 圓方樹的構建比較簡單,就是乙個tarjan把點雙跑出來,對於每乙個點雙我們多建乙個方點,把原圖中的點稱為圓點,將點雙內所有圓點向方點連邊,之後我們就得到了原圖的圓方樹 關於圓方樹的性質,zyb大爺在他的題解裡寫了很多,這裡就不再抄一遍了 至於這道題,就是把圓點拿出來建棵...

SDOI2018 戰略遊戲

time limit 30 sec memory limit 512 mb submit 12 solved 9 submit status discuss 省選臨近,放飛自我的小q無心刷題,於是慫恿小c和他一起頹廢,玩起了一款戰略遊戲。這款戰略遊戲的地圖由n個城市以及m條連線這些城市的雙向道路構成...