BZOJ從入門到入土

2022-09-06 14:03:32 字數 1469 閱讀 8973

[jsoi2010]連通數:有向圖求每乙個點到能到達的點的個數的和(包括自己到自己)

scc+bitset+dp

#includeusing namespace std;

// 方法:scc + bitset傳遞閉包 或 直接bitset優化floyd

/** * 1. tarjan板子複習

* 2. tarjan縮點重建圖複習

* 3. 利用bitset求傳遞閉包(更快,因為可以直接按位或)

* 4. bitset優化floyd

*/vectorh[2010]; // 原圖的鄰接表

// tarjan需要的變數

stackstk;

int dfn[2010], low[2010], instk[2010], idx;

int scc[2010], cnt; // 每乙個點所在的scc編號、scc的個數

int size[2010]; // 每乙個scc中包含的點數

vectorscc[2010]; // 新圖的鄰接表

bitset<2010> g[2010]; // 用於求新圖的傳遞閉包的bitset對於每乙個點開乙個bitset, 傳遞閉包直接或

void tarjan(int u)else if(instk[j] && dfn[j] < low[u])

low[u] = dfn[j];

}if(low[u] == dfn[u])while(1);

size[cnt] = num; // 當前scc中包含的點數

}}bitset<2010> dfs(int u)

return g[u];

}void solve()

}// scc

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

if(dfn[i] == 0) tarjan(i);

// 重建圖,需要遍歷所有邊

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

}int ans = 0;

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

cout << ans << endl;

}signed main()

bitset+floyd

#includeusing namespace std;

bitset<2010> g[2010];

void solve()

for(int k = 0; k < n; k ++)

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

if(g[i][k]) g[i] |= g[k];

int ans = 0;

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

cout << ans << endl;

}signed main()

Linux從入門到入土

在此開個專題,用來記錄一下在使用linux中常用的命令。持續更新 常見錯誤 dpkg i 檔名cmake dcmake install prefix usr include ar 解包 tar zxvf filename.tar 打包 tar czvf filename.tar dirname gz...

cmake 從入門到入土

你或許聽過好幾種 make 工具,例如 這些 make 工具遵循著不同的規範和標準,所執行的 makefile 格式也千差萬別。這樣就帶來了乙個嚴峻的問題 如果軟體想跨平台,必須要保證能夠在不同平台編譯。而如果使用上面的 make 工具,就得為每一種標準寫一次 makefile 這將是一件讓人抓狂的...

FFT 從入門到入土

fft 是一種可以在 o n log n 的時間複雜度內求解兩個多項式的乘積。實際上,fft 只是在求解方法上優化了 dft 離散傅利葉變換 的過程,並沒有提出新的理論。但是其高效的複雜度使得它被廣泛使用。就是使用乙個多項式的係數序列來表達這個多項式。f x sum a ix i leftright...