然後隨便用乙個資料結構維護一下就行了,我寫的線段樹。
我們先找出每個環,然後我們先刪連線環的邊,每刪一條就可以多產生乙個聯通塊,在考慮刪環邊,發現從最大的環刪起一定最優(因為你刪的第一條邊得不到任何新的聯通塊)。
就很容易想到tar
jantarjan
tarjan
,發現你只能寫出80
8080
分,因為可以用形如∞
\infty
∞的仙人掌,那麼邊雙聯通分量就會炸。
考慮另一種生成樹的方法,先生成一棵樹,然後向樹上模擬加邊生成環,最後我們需要找出沒有被環包含的點,可以用樹上差分,也可以用所有邊
−環上邊
所有邊-環上邊
所有邊−環上
邊得到剩下的點。
時間複雜度o(n
)o(n)
o(n)
。
#include
#include
#include
using
namespace std;
const
int maxn =
1000005
;int
read()
int n,m,k,cnt,ans,tot,f[maxn]
,p[maxn]
,dep[maxn]
;int a[
2*maxn]
,b[2
*maxn]
,fa[maxn][20
];priority_queue<
int> q;
struct edgee[2
*maxn]
;int
findset
(int x)
void
dfs(
int u,
int par)
intlca
(int u,
int v)
intmain()
,f[u]
=tot;
e[++tot]
=edge
,f[v]
=tot;
p[x]
=y;}
}for
(int i=
1;i<=n;i++)if
(!dep[i]
)int t=0;
for(
int i=
1;i<=cnt;i++)if
(k<=m-t)
ans+
=m-t;k-
=m-t;
while
(!q.
empty()
)printf
("%d\n"
,ans)
;}
牛客CSP S提高組賽前集訓營1
比賽鏈結 官方題解 before t1觀察 結論題,t2樹形dp,可以換根或up down,t3正解妙,轉化為圖上問題。題目質量不錯,但資料太水了 一共n個石子堆,每個石子堆有ai個石子,兩人輪流對石子塗色 先手塗紅,後手塗藍 且需要保證當前回合塗的石子顏色不能和它相鄰的兩個同色,誰塗不下去誰輸。一...
牛客CSP S提高組賽前集訓營5(待更)
題目描述 神樹大人造了乙個長為n的01序列,並邀請無所事事的神j來和他博弈。每一輪裡,若這個序列的第1項是0,那麼神樹大人可以選擇讓它不變或者變成1 若這個序列的第1項是1,那麼神j可以選擇讓它不變或者變成0。接著對這個序列進行旋轉操作 即將第1項放到第n項的後面,其他項依次替補。如果這個序列變為全...
牛客CSP S提高組賽前集訓營5 解題報告
linker 總分 100 100 40 240 結論題。無論如何神j都會贏。最優決策 神樹變化了我就不變,神樹不變我就變化。includeusing namespace std typedef long long ll const int mod 998244353 inline ll pow l...