其他分享
首页 > 其他分享> > 洛谷P4306 [JSOI2010]连通数 题解 传递闭包/bitset

洛谷P4306 [JSOI2010]连通数 题解 传递闭包/bitset

作者:互联网

题目链接:https://www.luogu.com.cn/problem/P4306

传递闭包 bitset 模板题。

需要注意的是 \(i = j\) 时需将 \(g_{i,i}\) 标记为 \(1\) 。

示例程序:

#include <bits/stdc++.h>
using namespace std;
const int maxn = 2020;
int n, ans;
char s[maxn];
bitset<maxn> g[maxn];

int main() {
    cin >> n;
    for (int i = 0; i < n; i ++) {
        cin >> s;
        for (int j = 0; j < n; j ++)
            if (i == j || s[j] == '1') g[i][j] = 1;
    }
    for (int i = 0; i < n; i ++)
        for (int j = 0; j < n; j ++)
            if (g[j][i])
                g[j] |= g[i];
    for (int i = 0; i < n; i ++)
        ans += g[i].count();
    cout << ans << endl;
    return 0;
}

标签:JSOI2010,闭包,++,题解,int,maxn,bitset,ans
来源: https://www.cnblogs.com/quanjun/p/15975490.html