2208: [Jsoi2010]连通数
Time Limit: 20 Sec Memory Limit: 512 MB
Description
Input
输入数据第一行是图顶点的数量,一个正整数N。 接下来N行,每行N个字符。第i行第j列的1表示顶点i到j有边,0则表示无边。
Output
输出一行一个整数,表示该图的连通数。
Sample Input
3
010
001
100
010
001
100
Sample Output
9
HINT
对于100%的数据,N不超过2000。
Source
Tips:
此题没话讲。
Code:
#include<bits/stdc++.h>
using namespace std; int n,m,ans=;
char s[];
std::bitset<>f[]; int main(){
scanf("%d",&n);
for(int i=;i<n;i++){
scanf("%s",s);
for(int j=;j<n;j++)
if(i==j) f[i][j]=; else f[i][j]=s[j]-;
}
for(int i=;i<n;i++)
for(int j=;j<n;j++)
if(f[j][i]){
f[j]=f[j]|f[i];
}
for(int i=;i<n;i++)
ans+=f[i].count();
printf("%d\n",ans);
}