luogu P4306 [JSOI2010]连通数

传送门

还是比较难的

首先题意就容易看错

要求的是有向图单向可达点对数目

考虑环中一定是互相可达的

所以先缩点然后统计好内部的贡献是sze[col]的平方

再dp一下就行

话说输出N^2有90 

另:有一个非标准做法就是O(N^3)搞一个传递闭包

然后用bitset卡常1/32

坑点就是(i->i)是要算到答案里的......

Time cost:55min

Code:

 1 // luogu-judger-enable-o2
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<bitset>
 5 using namespace std;
 6 #define rep(i,a,n) for(int i = a;i <= n;i++)
 7 const int N = 2005;
 8 //head
 9 int n,ans;
10 char s[N];
11 bitset<N> dp[N];
12 int main() {
13     scanf("%d",&n);
14     rep(i,1,n) {
15     scanf("%s",s+1);
16     rep(j,1,n) dp[i][j] = (s[j] == '1' || j == i);
17     }
18     rep(i,1,n) rep(j,1,n) {
19     if(dp[j][i]) dp[j] |= dp[i];
20     //bitset you_hua O(n^3/32)
21     }
22     rep(i,1,n) ans += dp[i].count();
23     printf("%d
",ans);
24     return 0;
25 }
View Code
> 别忘了 总有人在等着你
原文地址:https://www.cnblogs.com/yuyanjiaB/p/9910334.html