省选专练JSOI2010联通数

特别想知道非正常算法

学习了一下Bitset

毒瘤算法:Floyd传递闭包


#include<bits/stdc++.h>
using namespace std;
const int N=2501;
bitset<N> G[N];
int n,m;
int main(){
    scanf("%d",&n);
    for(register int i=1;i<=n;++i){
        char s[2001];
        scanf("%s",s+1);
        for(register int j=1;j<=n;++j){
            if(s[j]=='1'){
                G[i][j]=1;
            }
        }
        G[i][i]=1;
    }
    for(register int i=1;i<=n;++i){
        for(register int j=1;j<=n;++j){
            if(G[j][i])
                G[j]|=G[i];
            }
        }
    int ans=0;
    for(register int i=1;i<=n;++i){
        ans+=G[i].count();
    }
    cout<<ans;
}

猜你喜欢

转载自blog.csdn.net/fcb_x/article/details/81072068