2018.09.11 bzoj2208: [Jsoi2010]连通数(bitset+floyd)

2022-10-17,,

传送门

听说正解是缩点+dfs?

直接bitset优化floyd传递闭包就行了。(尽管时间复杂度是假的O(n3/32)" role="presentation" style="position: relative;">O(n3/32)O(n3/32))

代码:

#include<bits/stdc++.h>
using namespace std;
bitset<2005>f[2005];
int ans=0,n;
char s[2005];
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;++i){
        scanf("%s",s+1);
        for(int j=1;j<=n;++j)f[i][j]=s[j]^48||i==j;
    }
    for(int i=1;i<=n;++i)for(int j=1;j<=n;++j)if(f[j][i])f[j]|=f[i];
    for(int i=1;i<=n;++i)ans+=f[i].count();
    cout<<ans;
    return 0;
}

2018.09.11 bzoj2208: [Jsoi2010]连通数(bitset+floyd)的相关教程结束。

《2018.09.11 bzoj2208: [Jsoi2010]连通数(bitset+floyd).doc》

下载本文的Word格式文档,以方便收藏与打印。