[apio2018]鐵人兩項
對於點雙連通分量有乙個性質:在同乙個點雙里的三個點$a,b,c$,一定存在一條從$a$到$c$的路徑經過$b$且經過的點只被經過一次。
那麼我們建出原圖的圓方樹,列舉中間點$b$,一對合法的$a,c$需要使這兩個點位於與$b$直接相連的方點的不同子樹中。樹形$dp$,對圓點和方點分別統計答案即可。
#include#include#include#include#include#include#include#include#include#include#include#define ll long longusing namespace std;
int n,m;
int x,y;
vectorq[200010];
int head[100010];
int to[400010];
int next[400010];
int size[200010];
int low[100010];
int dfn[100010];
int tot;
int cnt;
int num;
int st[100010];
int top;
int vis[200010];
ll ans;
int sum;
void add(int x,int y)
void insert(int x,int y)
void tarjan(int x)
while(now!=to[i]);
}} else
}}void dfs(int x,int fa)
else
} }}
int main()
for(int i=1;i<=n;i++) }
for(int i=1;i<=cnt;i++) }
printf("%lld",ans);
}
APIO2018 鐵人兩項 圓方樹
給定一張無向圖,詢問存在多少三元組 s,c,f s,c,f s,c,f s,c,fs,c,f s,c,f各不相同 滿足存在一條從s ss到c cc,c cc到f ff的簡單路徑。n 1 05,m 105 n leq 10 5,m leq 10 5 n 105,m 10 5考慮建立圓方樹。固定s f ...
APIO2018 鐵人兩項
題意 在乙個無向圖裡面選三個點 s c f 需要能夠從 s 出發,經過 c 到達 f 點,中間不能提前經過 f 且需要是乙個簡單路徑 solution 簡單路徑當然就是園方樹了,想想怎麼統計答案 yy一下可以發現,有一條路徑 s f 中間能選的點就是路徑上的圓點和 因為在乙個點雙連通分量裡面,一定有...
APIO2018 Duathlon 鐵人兩項
給出一張無向圖,問有多少組點a,b,c滿足存在至少一條從a經過b到c的簡單路徑。首先考慮列舉點a,c,這樣每一組a,c對答案的貢獻就是可能在ac路徑之間出現的點的個數,然後我們可以對圖建圓方樹,使圓點的點權為 1 去重 方點的點權為點雙的大小,這樣ac路徑之間出現的點的個數就是a,c兩點在圓方樹上的...