2020牛客暑期多校訓練營(第八場)

2021-10-24 04:29:11 字數 3059 閱讀 9480

題目鏈結

a - all-star game

題意:有n個運動員與m個球迷,現給你n個運動員各自的球迷編號,現在問你若要m名球迷都看比賽,至少需要多少名運動員上場?

滿足球迷看比賽的條件:

(1) 該球迷喜歡的運動員有上場

(2) 球迷i與球迷j都有相同的喜歡球員,則球迷j喜歡運動員k,則球迷i也喜歡運動員k

然後有q次操作,每次操作撤銷或建立x與y的關係,並輸出每次操作後需要的運動員的數量

思路:其實該問題簡化到

給你一張圖,有兩個操作:

(1)刪去圖中原有的一條邊

(2)加上圖中沒的一條邊

詢問圖中聯通塊的個數。

其實這是乙個經典問題,線段樹分治問題,建立乙個時間軸,每次詢問操作按順序就是乙個葉節點,然後為每條邊建立生存時間的起點,終點即可。最後用線段樹查詢,用可撤銷並查集聯通塊維護即可

另一種做法:lct(目前還不會)

#include

using

namespace std;

#define fi first

#define se second

#define lc (rt << 1)

#define rc ((rt << 1) | 1)

typedef

long

long ll;

typedef pair<

int,

int> pii;

const

int maxn =

5e5+50;

int n, m, q;

vector<

int> vec[maxn <<2]

;void

update

(int le,

int ri,

int l,

int r,

int id,

int rt)

int mid =

(le + ri)

>>1;

if(l <= mid)

update

(le, mid, l, r, id, lc);if

(r > mid)

update

(mid +

1, ri, l, r, id, rc);}

mapint> mp;

struct edge

edge[maxn *10]

;int tot =0;

int le[maxn *10]

, ri[maxn *10]

;int ans =

0, sum =0;

struct qnode

stk[maxn *10]

;int top;

int fa[maxn]

, rank[maxn]

;int

find

(int x)

intunit

(int x,

int y)

else}if

(rank[x]

< rank[y]

)swap

(x, y);if

(rank[x]

== rank[y]

) rank[x]++;

fa[y]

= x;

return1;

}void

stkpop()

void

query

(int le,

int ri,

int rt)

if(le == ri)

else

while

(len--)}

intmain

(int argc,

char

const

*ar**)

for(

int i =

1; i <= n; i++))

)]=++tot;

edge[tot]=;

} le[tot]=1

;// 記錄起點}}

for(

int i =

1; i <= q; i++))

)]=++tot;

edge[tot]=;

}int id = mp;

if(le[id]==0

) le[id]

= i;

// 如果這條邊未記錄過,記錄左端點

else

le[id]

= ri[id]=0

;}}for

(int i =

1; i <= tot; i++)}

query(1

, q,1)

;return0;

}

e - enigmatic partition

題意:f(n)為滿足以下條件的方案數

(1)a1+

……+a

m=

na_1+……+a_m=n

a1​+……

+am​

=n(2)a

i<=a

i+

1<=a

i+

1a_i<=a_<=a_i+1

ai​<=a

i+1​

<=a

i​+1

(3)am=

a1+2

a_m=a_1+2

am​=a1

​+2思路:他人詳細題解

#include

#define ll long long

using

namespace std;

const

int maxn=

1e5+

100;

ll f[maxn<<2]

,pre[maxn<<1]

;int

main()

//直接輸出答案

}

2020牛客暑期多校訓練營(第八場)

題意 給出n對數,對於每一對,其中如果有沒有選過的數那麼就可以選,就可以選擇那乙個數,ans 需要求最大的ans 思路 隊友很強,思路秒出,十分鐘 一發ac可以把這些數對想成一條邊上的兩個點,可以想像一下如果我要最多的選擇這上面的點,假如這些點構成的邊是一棵樹的話,我們最多在這n個點中能選擇的只有n...

2020牛客暑期多校訓練營(第八場)

總結 這次做的不好,爆零了,雖然確實本場題比較難,但是沒做出來確實問題很大,考慮問題不夠全面仔細。kg 待定給出n對數字a,b。有三種操作。第一種,什麼也不做。第二種,如果ai在在前面沒有被選過,可以選擇ai。第三種,如果bi在前面沒有被選過,可以選擇bi。求最多可以選擇多少種不同的數字。對數字進行...

2020牛客暑期多校訓練營(第八場)

目錄傳送門 solvedab cdef ghij k5 11o o o o o對時間分治,線段樹維護可撤銷並查集的模板題。這樣可以直接維護每乙個時刻的連通性,我們只需要求出當前連通塊的個數 雙方孤立的點數即可得出答案。所以在增 添邊時維護一下點的度數和孤立點數即可。code author heyuh...