还是比较难的
首先题意就容易看错
要求的是有向图单向可达点对数目
考虑环中一定是互相可达的
所以先缩点然后统计好内部的贡献是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 }