條件 題解 bitset優化floyd

2022-06-10 10:24:10 字數 743 閱讀 1606

思路其實很簡單就是跑兩次floyd

但是問題是這樣會超時,所以用bitset優化

bitset每位只佔乙個bit

而bool佔乙個byte

1byte=4bit

遍歷bitset的複雜度為\(o(/)\)

w在根據計算機不同為32/64

具體的操作可以參考部落格鏈結

這樣複雜度優化到\(o(n^3/w)\)

#include#define fi first

#define se second

#define debug cout<<"i am here"const int maxn=1e3+5,inf=0x3f3f3f3f;

const int eps=1e-3;

const ll mod=1004535809;

bitseta[maxn],b[maxn];

int n,m1,m2,q;

signed main()

for(int i=1,u,v;i<=m2;i++)

for(int i=1;i<=n;i++)

for(int i=1;i<=n;i++)

for(int mid=1;mid<=n;mid++)

if(b[beg][mid])}}

for(int i=1,u,v;i<=q;i++)else

if(b[u][v])else

}return 0;

}

bitset 優化 01 矩乘

這裡的矩乘並不狹隘地專指一般矩陣乘法,而可以指所有與一般矩乘一樣具有結合律的二元矩陣運算。例 定義一種 01 矩陣乘法 a cdot b c 為下面的 c for int i 1 i n i for int j 1 j n j for int k 1 k n k c i j a i k b k j ...

Sajam(01翻轉 bitset優化)

原題 題意 n n的01矩陣,你可以無限次翻轉一行或者一列,可以最多翻轉k k n 次乙個點。問是否可以全部翻轉成0。解析 k n說明至少有一行不會被翻轉單個點,或者k n時每行翻轉乙個點。那麼列舉每一行為那一行,將其他行與之對比 可以翻轉後再對比 不同的數量就是需要翻轉單個點的數量。因為有列翻轉,...

bzoj3687 簡單題 bitset優化揹包

給定乙個總和不大於2e6的數集,求子集的算術和的異或和。好像可以直接上01揹包dp。但是會tle。其實記錄的只是每個體積的狀態的奇偶,所以方程可以寫成dp i dp i dp i x dp i d p i dp i x 然後發現每乙個點都是異或上前面一定距離的數,所以我們可以把整個陣列往後移動x個然...