ICPCCamp 2016 Day 1 - B All Pair Shortest Path (bitset)
2016-04-14 14:07
344 查看
#include <iostream> #include <cstring> #include <cstdio> #include <queue> using namespace std; #define N 2020 #define M 200020 #define LL long long struct bs { #define K 40 #define B 60 LL a[K]; void reset() { for(int i = 0; i < K; ++i) a[i] = 0; } void set(int k, int v) { int t = k / B; int p = k % B; if(v == 1) a[t] |= 1LL << p; else { a[t] |= (1LL << p); a[t] ^= 1LL << p; } } bs operator & (const bs &b) const { bs ret; ret.reset(); for(int i = 0; i < K; ++i) { ret.a[i] = a[i] & b.a[i]; } return ret; } int lowbit() { for(int i = 0; i < K; ++i) { if(a[i] == 0) continue; int ret = 0; LL t = a[i]; while(t % 2 == 0) { ++ret; t /= 2; } a[i] -= a[i] & -a[i]; return ret + i * B; } return 0; } }; bs d ; char s ; int n; int dis ; bs vis, tmp; LL bfs(int src) { queue<int> q; vis.reset(); for(int i = 1; i <= n; ++i) dis[i] = n, vis.set(i, 1); dis[src] = 0; q.push(src); vis.set(src, 0); while(!q.empty()) { int u = q.front(); q.pop(); tmp = vis & d[u]; int x; while(x = tmp.lowbit()) { dis[x] = dis[u] + 1; vis.set(x, 0); q.push(x); } } LL ret = 0; for(int i = 1; i <= n; ++i) ret += 1LL * dis[i] * dis[i]; return ret; } int main() { scanf("%d", &n); for(int i = 1; i <= n; ++i) { d[i].reset(); scanf("%s", s + 1); for(int j = 1; j <= n; ++j) { d[i].set(j, s[j] - 48); } } LL ans = 0; for(int i = 1; i <= n; ++i) ans += bfs(i); cout << ans << endl; return 0; }
相关文章推荐
- 70. Climbing Stairs
- Aizu 0005 GCD and LCM【辗转相除法】
- 70. Climbing Stairs
- Aizu 2224 Save your cats【最大生成树】
- MDK 5.10 -- Reading one or more Pack descriptions failed
- VS2008或以上版本的ActiveX控件的测试工具(ActiveX Control Test Container)编译记录
- CDISC SDTM SV domain 学习笔记
- SSH出现Host key verification failed
- 了解点OpenAI及深度学习研究前沿
- 【RAID】基本结构
- sleep()、wait()、yield()、join()方法 解析
- 数据仓库专题(23):总线矩阵的另类应用-Drill Down into a More Detailed Bus Matrix
- 从人工智能的“冬天“走出来
- [Consul]Error starting agent: Failed to get advertise address: Multiple private IPs found.
- baidu实习日志(入职篇)
- 理解TimesTen错误日志信息"waiting for latch"
- marathon参考(6): 约束Constraints
- WINAPI WinMain
- Failing Oozie Launcher, Main class [org.apache.oozie.action.hadoop.ShellMain], exit code [1]
- ICPCCamp2016day 1 - All Pair Shortest Path【bitset优化】