題面
先圓方樹然後建虛樹,答案就是虛樹大小。虛樹沒必要建出來,把原來的點的點權設為1,直接dfs序排序後相鄰點求距離加上首尾兩個點的距離,最後除以二(畫一下可以發現是正反算了兩遍),注意還要去掉詢問點和補上首尾兩個點的lca
1 #include2 #include3 #include4 #include5view code#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 }
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條連線這些城市的雙向道路構成...