【洛谷P4306】连通数【bitset 传递闭包】
作者:互联网
分析:
用
b
i
t
s
e
t
bitset
bitset神器
+
+
+ 传递闭包就行了
传递闭包可以求出所有点的所能到达的点集
如果直接
n
3
n^3
n3传递闭包会
T
T
T 用
b
i
t
s
e
t
bitset
bitset可以优化成
n
2
n^2
n2
具体
b
i
t
s
e
t
bitset
bitset用法
:
:
:
t
e
s
t
(
i
)
test(i)
test(i)表示查找
i
i
i下标的元素为
1
1
1或
0
0
0
c
o
u
n
t
(
)
count()
count()表示
1
1
1的个数
CODE:
#include<cmath>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<iostream>
#include<bitset>
using namespace std;
typedef long long ll;
const int N=2005;
int n,ans;
char s[N];
bitset<N> a[N];
int main()
{
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%s",s);
for(int j=0;j<n;j++)
a[i][j]=s[j]-'0';
a[i][i]=1;
}
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if(a[j].test(i)) //相当于a[j][i]==1
a[j]|=a[i];
for(int i=0;i<n;i++)
ans+=a[i].count();
printf("%d",ans);
return 0;
}
标签:闭包,洛谷,int,long,传递,连通数,bitset,include 来源: https://blog.csdn.net/dgssl_xhy/article/details/118685142