BZOJ2008 JSOI2010连通数(floyd+bitset)
2018-07-28 12:48
246 查看
一直不明白为什么要用floyd求传递闭包,直接搜不是更快嘛……不过其实可以用bitset优化,方法也比较显然。bitset是真的神奇啊,好多01状态且转移相似的东西都可以用这个优化一下。
#include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> #include<bitset> using namespace std; int read() { int x=0,f=1;char c=getchar(); while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();} while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar(); return x*f; } #define N 2010 int n,ans=0; bitset<N> a ; int main() { freopen("bzoj2208.in","r",stdin); freopen("bzoj2208.out","w",stdout); n=read(); for (int i=1;i<=n;i++) { char c=getchar(); while (c!='0'&&c!='1') c=getchar(); for (int j=1;j<=n;j++) a[i][j]=c^48,c=getchar(); a[i][i]=1; } for (int k=1;k<=n;k++) for (int i=1;i<=n;i++) if (a[i][k]) a[i]|=a[k]; for (int i=1;i<=n;i++) ans+=a[i].count(); cout<<ans; fclose(stdin);fclose(stdout); return 0; }
相关文章推荐
- BZOJ 2208 JSOI 2010 连通数 Tarjan+bitset
- BZOJ.2208.[JSOI2010]连通数(bitset Tarjan 拓扑)
- [tarjan+bitset]BZOJ 2208——[Jsoi2010]连通数
- bzoj 2208 [Jsoi2010]连通数 bitset
- BZOJ_2208_[Jsoi2010]连通数_强连通分量+拓扑排序+手写bitset
- BZOJ 2208 [Jsoi2010]连通数 tarjan缩点+bitset优化DP
- [bzoj2208][Jsoi2010]连通数_bitset_传递闭包floyd
- bzoj2208 [Jsoi2010]连通数(scc+bitset)
- bzoj 2208: [Jsoi2010]连通数 拓扑排序+强连通分量+bitset
- BZOJ 2208: [Jsoi2010]连通数 tarjan bitset
- 【BZOJ2208】[Jsoi2010]连通数【BFS/DFS】【SCC】
- Dfs【p4306(bzoj 2208)】 [JSOI2010]连通数
- 【BZOJ2208】[Jsoi2010]连通数 DFS
- BZOJ 2208: [Jsoi2010]连通数
- BZOJ 2208: [Jsoi2010]连通数( DFS )
- 【BZOJ】2208 [Jsoi2010]连通数
- 2208: [Jsoi2010]连通数 - BZOJ
- bzoj 2208: [Jsoi2010]连通数
- [BZOJ2208][Jsoi2010]连通数(dfs||tarjan+拓扑序+dp)
- [BZOJ2208][Jsoi2010]连通数(tarjan+topdp)