BFS BZOJ省選十連測 Cycle

2021-09-11 20:14:16 字數 2214 閱讀 9981

蛤?

這題絕對有問題。。。

複雜度明顯不對頭。。。

它的想法其實就是找到乙個點,判斷它與它周圍的點能否構成環,然後不能再刪去這個點。。。

然而。。。他每次都memset了一發,這不t?服都服了。。。

#include

#include

#include

#include

#define sf scanf

#define pf printf

#define maxn 1010

using

namespace std;

typedef vector<

int> vi;

vector<

int> a[maxn]

;int mark[maxn]

,done[maxn]

;bool lk[maxn]

[maxn]

,vis[maxn]

;int que[maxn]

;vi bfs

(int s)

} vi res;

for(

int i=

1;i<=r;i++

) res.

push_back

(que[i]);

return res;

}int q[maxn]

,pre[maxn]

;void

find_cir

(int x,

int y,

int key)

else

if(done[v]==0

&&vis[v]==0

&&mark[v])}

}}bool

solve

(vi &les)

done[u]=1

;for

(int k=

0;k<

int(les.

size()

);k++)if

(vis[les[k]]==

0&&done[les[k]]==

0)sort

(nc.

begin()

,nc.

end())

; nc.

erase

(unique

(nc.

begin()

,nc.

end())

,nc.

end())

;for

(int i=

0;i<

int(nc.

size()

);i++)if

(mark[nc[i]]==

1)for(

int j=

0;j<

int(nc.

size()

);j++)if

(i!=j&&lk[nc[i]

][nc[j]]==

0)for(

int i=

0;i<

int(nc.

size()

);i++

) nles.

push_back

(nc[i]);

les_part.

push_back

(nles);}

vi ad;

for(

int i=

0;i<

int(a[u]

.size()

);i++)if

(mark[a[u]

[i]]

) ad.

push_back

(a[u]

[i])

;for

(int i=

0;i<

int(les_part.

size()

);i++)if

(solve

(les_part[i]))

return1;

return

solve

(ad);}

intmain()

for(

int i=

1;i<=n;i++

) les.

push_back

(i);if(

solve

(les)==0

)pf("no");

pf("\n");

}}

BZOJ十連測 線段樹

在若干次操作後,某乙個位置的值可以表示成若干各區間的最大值。例如位置k kk,我們找到當前操作前最後乙個 編號最大但小於當前編號 覆蓋當前區間左端點的操作的左端點,最後乙個覆蓋當前當前區間右端點的操作的右端點,把這個左右端點當成乙個新的操作區間,然後重複執行上述操作。也就是我們需要一直向左找,一直向...

正睿2020提高組十連測 選做

更新中.目錄題目鏈結 理解題意,打出第乙個暴力 首先需要知道,隨機生成的樹 如果不特別說明隨機方法,就是指在所有 n 棵樹里隨機 最大深度期望是 o sqrt 的。看本題。首先,期望是嚇唬你的,因為期望乘上階乘,其實就是求和。於是我們要求 所有排列下 操作後所有點的權值和 的和 因此暴力做法就是列舉...

BZOJ 2017省隊十連測推廣賽1

聽學長說有比賽就隨便打一打。a.普通計算姬 題目大意 給出一棵帶權樹,支援一下兩種操作 1.修改乙個點的權值 2.給出l,r,詢問以點l為根的子樹和 點l 1為根的子樹和 點l 2為根的子樹和 點r為根的子樹和的總和。點數 運算元不超過10 5 思路 感覺是三題中最難的。給出的 l,r 區間在樹上沒...