P2881 [USACO07MAR]排名的牛Ranking the Cows
阿新 • • 發佈:2018-10-16
直接 urn ret cow count 自己 std clu span
bitset優化傳遞閉包模板題
這種關系直接用圖論來建模就是了,其實就是一個傳遞閉包。
傳遞閉包有一個樸素的做法就是floyd。
而這道題的範圍是\(n \leq 1000\),\(n^3\)的暴力顯然會T。
而使用bitset,聽說可以優化到原做法的\(\frac{1}{32}\)甚至更好!
直接給代碼其實是自己不懂原理
#include<cstdio> #include<bitset> const int maxn = 1005; std::bitset<maxn> b[maxn]; int n, m; int main() { scanf("%d%d", &n, &m); for(int i = 1; i <= n; i++) b[i][i] = true; while(m--) { int u, v; scanf("%d%d", &u, &v); b[u][v] = true; } for(int k = 1; k <= n; k++) { for(int i = 1; i <= n; i++) { if(b[i][k]) { b[i] |= b[k]; } } } int ans = 0; for(int i = 1; i <= n; i++) ans += b[i].count(); ans -= n; ans = n * (n - 1) / 2 - ans; printf("%d\n", ans); return 0; }
P2881 [USACO07MAR]排名的牛Ranking the Cows