1. 程式人生 > >[Jsoi2010]連通數 bitset + Floyd

[Jsoi2010]連通數 bitset + Floyd

Code:

#include<cstdio>
#include<algorithm>
#include<string>
#include<cstring>
#include<bitset>
using namespace std;
void setIO(string a){
	freopen((a+".in").c_str(),"r",stdin);
}


#define maxn 2500
bitset<maxn> G[maxn];
char arr[maxn];
int main(){
	int n;
	scanf("%d",&n);
	for(int i=0;i<n;++i){
		scanf("%s",arr);
		G[i][i]=1;
		for(int j=0;j<n;++j) if(arr[j] == '1') G[i][j]=1;
	}
    for(int k=0;k<n;++k)
    	for(int i=0;i<n;++i)  if(G[k][i]) G[k]|=G[i];
    int ans=0;
    for(int i=0;i<n;++i) ans+=G[i].count();
    printf("%d",ans);
    return 0;

}