不經過重點,考慮點雙
點雙,考慮圓方樹
兩個點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 中間能選的點就是路徑上的圓點和 因為在乙個點雙連通分量裡面,一定有...