[Jsoi2010]連通數 bitset + Floyd
Code:
#include<cstdio> #include<algorithm> #include<string> #include<cstring> #include<bitset> using namespace std; void setIO(string a){ freopen((a+".in").c_str(),"r",stdin); } #define maxn 2500 bitset<maxn> G[maxn]; char arr[maxn]; int main(){ int n; scanf("%d",&n); for(int i=0;i<n;++i){ scanf("%s",arr); G[i][i]=1; for(int j=0;j<n;++j) if(arr[j] == '1') G[i][j]=1; } for(int k=0;k<n;++k) for(int i=0;i<n;++i) if(G[k][i]) G[k]|=G[i]; int ans=0; for(int i=0;i<n;++i) ans+=G[i].count(); printf("%d",ans); return 0; }
相關推薦
[Jsoi2010]連通數 bitset + Floyd
Code: #include<cstdio> #include<algorithm> #include<string> #include<cstring> #include<bitset> using namespace std; void
BZOJ2008 JSOI2010連通數(floyd+bitset)
() pan bits cout math esp i++ pre etc 一直不明白為什麽要用floyd求傳遞閉包,直接搜不是更快嘛……不過其實可以用bitset優化,方法也比較顯然。bitset是真的神奇啊,好多01狀態且轉移相似的東西都可以用這個優化一下。 #inc
[BZOJ2208][P4306][JSOI2010]連通數[bitset優化floyd]
#include <bits/stdc++.h> using namespace std; int n, ans, c, i, j, k; bitset<2007>a[2005]; int read() { for(c = getchar(); !isdigit(c); c =
BZOJ-2208-[Jsoi2010]連通數(bitset+floyd)
pac n) int border color view += set 技術 Description Input 輸入數據第一行是圖頂點的數量,一個正整數N。 接下來N行,每行N個字符。第i行第j列的1表示頂點i到j有邊,0則表示無邊。 Output 輸出一行一
【傳遞閉包+bitset優化】BZOJ2208 [Jsoi2010]連通數
題面在這裡 首先O(nm)的暴力貌似能過? 一眼就看到了是傳遞閉包問題 定義 f[i][j]表示 i是否能到 j 問題在於怎麼轉移這個遞推 可以用Tarjan縮點後按拓撲序遞推,最壞是O(n2
bzoj 2208: [Jsoi2010]連通數
輸入 use mar images new sea mem cto 強連通 2208: [Jsoi2010]連通數 Time Limit: 20 Sec Memory Limit: 512 MB Submit: 1682 Solved: 686 [Submit][
BZOJ2208: [Jsoi2010]連通數
cstring n) 接下來 image void ret std %d mage Description Input 輸入數據第一行是圖頂點的數量,一個正整數N。 接下來N行,每行N個字符。第i行第j列的1表示頂點i到j有邊,0則表示無邊。 Ou
2208. [JSOI2010]連通數【Tarjan】
src jsoi2010 else tps iostream jpg data ring 計算 Description Input 輸入數據第一行是圖頂點的數量,一個正整數N。 接下來N行,每行N個字符。第i行第j列的1表示頂點i到j有邊,0則表示無邊。
[luoguP4306][JSOI2010]連通數
pan ~~ 進制 asi add OS sta truct http \[Yeasion\] \[Nein\] 其實我很奇怪為什麽我的正解和輸出n×n的效果是一樣的.....嗯,大概是\(RP\)問題吧.... 嗯首先來看一下題目: 題目描述: 度量一個有向圖連通情況的一
[BZOJ2208][Jsoi2010]連通數 暴力枚舉
數組 sizeof tput efi pac cor jpg its search Description Input 輸入數據第一行是圖頂點的數量,一個正整數N。 接下來N行,每行N個字符。第i行第j列的1表示頂點i到j有邊,0則表示無邊。
BZOJ2208 [Jsoi2010]連通數
字符 color c++ bzoj2208 mage col hint online esc Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 4212 Solved: 1816[Submit][Status][Discuss
P4306 [JSOI2010]連通數
https://www.luogu.org/problemnew/show/P4306 Problem:給你一張個點條邊的有向圖,現定義點對表示連通關係:從點能直接或間接到達點,問你圖中存在多少對這樣的關係。 關於原題的題意,需注意幾點: 1.因為題目給的是有向圖,所以(存在從點到達
[BZOJ2208][Jsoi2010]連通數
Time Limit: 20 Sec Memory Limit: 512 MB Description Input 輸入資料第一行是圖頂點的數量,一個正整數N。 接下來N行,每行N個字元。第i行第j列的1表示頂點i到j有邊,0則表示無邊。 Output 輸出一行一個整數,表
BZOJ2208 [Jsoi2010]連通數 【圖的遍歷】
題目 輸入格式 輸入資料第一行是圖頂點的數量,一個正整數N。 接下來N行,每行N個字元。第i行第j列的1表示頂點i到j有邊,0則表示無邊。 輸出格式 輸出一行一個整數,表示該圖的連通數。 輸入樣例 3 010 001 100 輸出
Luogu P4306 [JSOI2010]連通數 傳遞閉包
() 水過 我們 std 過去 -- math can %s 正解其實是\(Tarjan\) + \(拓撲拓撲\),但是卻可以被\(O(N^3 / 32)\)復雜度的傳遞閉包水過去。心疼一下寫拓撲的小可愛們。 學到一個\(bitset\)優化布爾圖的騷操作,直接壓進去亂搞,
【BZOJ2208/Jsoi2010】連通數
2208: [Jsoi2010]連通數 Time Limit:
[luoguP1037] 產生數(floyd + 高精度)
can wap i++ har http nbsp sizeof light mes 傳送門 先用 floyd 求出每一個數可以變成那些數。 然後利用乘法原理求解,需要高精度。 代碼 #include <cstdio> #include
[BZOJ 2208] 連通數
include 傳遞 spa back 排序 typedef names dag print Link: BZOJ 2208 連通數 Solution: 傳遞閉包模板題 傳遞閉包是集合中最小的二元關系,其實就是對二元關系的不斷拓展,一般用$floyd$求解 這裏要先跑一遍$
P2347 砝碼稱重-DP方案數-bitset
方案 follow www. tps 一個 vector 集合 max 簡單 P2347 砝碼稱重 DP做法 : 轉化為 01背包。 進行方案數 更新。最後統計種類。 #include<bits/stdc++.h> using namespace std;
C++簡單版BitSet求解大量數據是否存在莫個數
end private ext its append 大量數據 name parent -- #include <iostream> using namespace std; template<int N> class BitSe