APIO2018 Duathlon 鐵人兩項

2022-02-05 08:09:13 字數 1483 閱讀 2855

不經過重點,考慮點雙

點雙,考慮圓方樹

兩個點s,t,中間路徑上,所有點雙里的點都可以經過,特別地,s,t作為割點的時候,不能往後走,也就是不能經過身後的方點

也就是,(s,t)經過樹上路徑上的所有圓點和方點

把方點權值設為點雙大小-2,圓點權值設為1,(s,t)路徑上的權值就是c的選擇方案數(不算s,t自己權值)

問題轉化為:求樹上任意點對的距離和,(x,y),(y,x)算兩次

在轉化為考慮每個點的貢獻,樹形dp即可

注意:1.可能不連通

2.sz統計的是圓點的個數

3.最後乘2

#include#define reg register int

#define il inline

#define numb (ch^'0')

using

namespace

std;

typedef

long

long

ll;il

void rd(int &x)

namespace

miraclee[

2*m];

inthd[n],cnt;

void add(int x,int

y)int

dfn[n],df;

intlow[n];

ll ans=0

;int

vis[n];

intval[n];

inttyp[n];

vector

mem[n];

intnum;

intsta[n],top;

void tarjan(int

x)while(z!=y);

mem[num].push_back(x);}}

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

}}int sz[2*n];

int totsz=0

;void fin(int x,int

fa)}

void dfs(int x,int

fa) ll tmp=totsz-sz[x];

for(reg i=hd[x];i;i=e[i].nxt)

}int

main()

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

int tot=n;

memset(hd,

0,sizeof

hd);

cnt=0

;

//cout<<" num "}

for(reg i=1;i<=tot;++i)

}printf(

"%lld

",ans*2

);

return0;

}}signed main()

/*author: *miracle*

date: 2019/2/15 9:04:01

*/

2018APIO 進京趕考

先見識了一下ctsc的操作。漲了見識。打鐵匠x1 見識了個全英文的ppt,各種講課其實真的講的很好,只是邏輯性太強反而讓完全不會的同學有些尷尬。linux真的令人窒息。guide用不起就算了,控制台除錯。報錯直接密密麻麻打5頁螢幕看都看不懂。編譯都編譯不起我還玩個啥?我就聽懂了凱老師的講課,彈幕令人...

遊記 APIO2018遊記

update 雞排真好吃,明年有機會再來北京van明天就要去北京浪了,於是在模擬apio2015前嘗試去做了hash,很愉快地wa了,就開始了模擬apio2015的比賽。a題亂搞,c題亂搞,b題結果暴力都沒寫出來。感覺這為後面暴力沒搞出來暴力打好了堅實的基礎 hdhd過金牌線。總體還是很愉快的,每個...

APIO2018 鐵人兩項

題意 在乙個無向圖裡面選三個點 s c f 需要能夠從 s 出發,經過 c 到達 f 點,中間不能提前經過 f 且需要是乙個簡單路徑 solution 簡單路徑當然就是園方樹了,想想怎麼統計答案 yy一下可以發現,有一條路徑 s f 中間能選的點就是路徑上的圓點和 因為在乙個點雙連通分量裡面,一定有...