BZOJ-2208-[Jsoi2010]連通數(bitset+floyd)
阿新 • • 發佈:2017-11-09
pac n) int border color view += set 技術
010
001
100
Description
Input
輸入數據第一行是圖頂點的數量,一個正整數N。 接下來N行,每行N個字符。第i行第j列的1表示頂點i到j有邊,0則表示無邊。
Output
輸出一行一個整數,表示該圖的連通數。
Sample Input
3010
001
100
Sample Output
9HINT
對於100%的數據,N不超過2000。
Source
第一輪
題解
這道題剛看到就想到暴力,時限有20s,dfs可以A
但是dfs有些慢,我們想一些更優的算法
這道題就是讓我們求傳遞閉包
所以我們可以用bitset來優化floyd
1 #include<bits/stdc++.h> 2View Code#define N 2005 3 using namespace std; 4 int n,x,ans; 5 bitset<N>flag[N]; 6 char st[N]; 7 int main(){ 8 scanf("%d",&n); 9 for (int i=1;i<=n;i++){ 10 scanf("%s",st+1); 11 for (int j=1;j<=n;j++) 12 if (st[j]==‘1‘||i==j) flag[i][j]=true; 13 }14 for (int j=1;j<=n;j++) 15 for (int i=1;i<=n;i++) 16 if (flag[i][j]) flag[i]|=flag[j]; 17 for (int i=1;i<=n;i++) 18 ans+=flag[i].count(); 19 printf("%d\n",ans); 20 return 0; 21 }
BZOJ-2208-[Jsoi2010]連通數(bitset+floyd)