Bitset 友好城市

2021-09-13 09:04:04 字數 1712 閱讀 7768

分塊+st表+bitset卡常

把公路分成k塊,內部通過bitset處理出連通狀況。

每次詢問,把連續的一些塊通過st表得到邊,再用兩次dfs求強連通分量的方法,合併這些邊,得到新的連通狀況。

#include

#include

#include

#include

#include

#include

#define sf scanf

#define pf printf

#define maxm 300010

#define maxn 160

#define maxb 800

using

namespace std;

const

int k=

400;

pair<

int,

int> l[maxm]

;bitset f1[maxb][12

][maxn]

,f0[maxb][12

][maxn]

,tmp0[maxn]

;bitset f3[maxb][12

][maxn]

,f2[maxb][12

][maxn]

,tmp1[maxn]

;bitset vis;

int stk[maxn]

,top;

void

dfs1

(int x)

stk[

++top]

=x;}

intdfs2

(int x)

return res;

}int n,m,q;

intquery()

return res;

}void

ins(

int l,

int r,

int id)

}int blo[maxm]

,maxf[maxb]

;int

main()

int tot=m/k+1;

for(

int i=

1;i<=m;i++

)for

(int i=

1;i<=tot;i++

)for

(int j=1;

(1<

<=i;j++

) maxf[i]

=j;for

(int i=

1;i<

11;i++

)for

(int j=

1;j<=tot;j++

)for

(int l=

1;l<=n;l++

)for

(int i=

1;i<

11;i++

)for

(int j=tot;j>=

1;j--

)for

(int l=

1;l<=n;l++

)int l,r;

for(

int i=

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

pf("%lld\n"

,query()

);}}

友好城市(dp演算法)

這個題也是最長上公升子串行的應用題,我們只需要對一邊的端點排序,再對另一邊的端點求最長上公升子串行即可,因為一邊端點有序,另一邊端點求最長上公升子串行就可以保證這些橋不相交。自行腦補。這題需要用到最長上公升子串行的優化,樸素只能得部分分 include define x first define y...

例9 7 友好城市

時間限制 1000 ms 記憶體限制 65536 kb palmia國有一條橫貫東西的大河,河有筆直的南北兩岸,岸上各有位置各不相同的n個城市。北岸的每個城市有且僅有乙個友好城市在南岸,而且不同城市的友好城市不相同。每對友好城市都向 申請在河上開闢一條直線航道連線兩個城市,但是由於河上霧太大,決定避...

P2782 友好城市

p2782 友好城市 1本題隱晦的說這個題目是乙個最長上公升子串行,先對南邊或者北邊排個序,然後再求最長上公升子串行,我也不知道自己怎麼想出來的,可能就是我最近一直在寫dp有關的題目吧 include include include include include include include i...