1. 程式人生 > >BZOJ2208 [Jsoi2010]連通數

BZOJ2208 [Jsoi2010]連通數

字符 color c++ bzoj2208 mage col hint online esc

Time Limit: 20 Sec Memory Limit: 512 MB
Submit: 4212 Solved: 1816
[Submit][Status][Discuss]

Description

技術分享圖片

Input

輸入數據第一行是圖頂點的數量,一個正整數N。 接下來N行,每行N個字符。第i行第j列的1表示頂點i到j有邊,0則表示無邊。

Output

輸出一行一個整數,表示該圖的連通數。

Sample Input

3
010
001
100

Sample Output

9

HINT

對於100%的數據,N不超過2000。

用warshall算法求傳遞閉包即可

通過本題了解了bitset的使用orz

#include <bits/stdc++.h>
using namespace std;
bitset <2005> g[2005];
int n,ans;
char s[2005];
int main(){
    ans = 0;
    scanf("%d",&n);
    for (int i = 1;i <= n;++i){
        scanf("%s",s+1);
        for (int j = 1;j <= n;++j){
            if (s[j] == 
1) g[i][j] = 1; if (i == j) g[i][j] = 1; } } for (int i = 1;i <= n;++i){ for (int j = 1;j <= n;++j){ if (g[j][i]) g[j] |= g[i]; } } for (int i = 1;i <= n;++i){ ans += g[i].count(); } printf("%d\n",ans);
return 0; }

BZOJ2208 [Jsoi2010]連通數