可達性統計

2022-05-07 14:42:12 字數 3423 閱讀 9223

給定一張n個點m條邊的有向無環圖,分別統計從每個點出發能夠到達的點的數量。

輸入格式

第一行兩個整數n,m,接下來m行每行兩個整數x,y,表示從x到y的一條有向邊。

輸出格式

輸出共n行,表示每個點能夠到達的點的數量。

資料範圍

1≤n,m≤30000<?xml:namespace prefix = "[default] " ns = "" />1≤n,m≤30000

輸入樣例:

10 10

3 82 3

2 55 9

5 92 3

3 94 8

2 10

4 9

輸出樣例:
163

3211

111

首先,要求的是每個點出發能到達的點數包括它本身。注意是有向無環圖。
思路:
1. 由推導可知(一看就知道嘿嘿),假設當前點是 x, 則通過x能到達的點,是由x
所指向的點的指向的點的…..,的集合。
2. 設f(x)為x點能到達的點數,
f(x) =  u ;//這裡的son代表x指向的點,f(son)就是兒子能到
達的點數。
3.通過2的公式可以得知,計算應該從尾巴節點開始算,然後一步步累加, 所以我們可以先求出無向圖的
拓撲排序,然後反向的計算,因為拓撲排序反過來就是從尾巴開始的。
4。看資料是30000,所以直接開二維陣列會爆,這個時候就要用到二進位制狀態壓縮,stl庫中有bitset
直接用就ok

**:
#include #include #include #include #include using namespace std;

const int n = 30010;

int n, m;

int h[n], e[n], ne[n], idx;

int d[n], seq[n];//seq存拓撲排序

bitsetf[n];

void add(int a, int b)

void topsort()

int k = 0;

while(!q.empty())

}}int main()

topsort();

for(int i = n - 1; ~i; -- i)

for(int i = 1; i <= n; ++ i) cout << f[i].count() << endl;//統計每個點的二進位制位1的個數就是答案

return 0;

}

給定一張n個點m條邊的有向無環圖,分別統計從每個點出發能夠到達的點的數量。

輸入格式

第一行兩個整數n,m,接下來m行每行兩個整數x,y,表示從x到y的一條有向邊。

輸出格式

輸出共n行,表示每個點能夠到達的點的數量。

資料範圍

1≤n,m≤30000<?xml:namespace prefix = "[default] " ns = "" />1≤n,m≤30000

輸入樣例:

10 10

3 82 3

2 55 9

5 92 3

3 94 8

2 10

4 9

輸出樣例:
163

3211

111

首先,要求的是每個點出發能到達的點數包括它本身。注意是有向無環圖。
思路:
1. 由推導可知(一看就知道嘿嘿),假設當前點是 x, 則通過x能到達的點,是由x
所指向的點的指向的點的…..,的集合。
2. 設f(x)為x點能到達的點數,
f(x) =  u ;//這裡的son代表x指向的點,f(son)就是兒子能到
達的點數。
3.通過2的公式可以得知,計算應該從尾巴節點開始算,然後一步步累加, 所以我們可以先求出無向圖的
拓撲排序,然後反向的計算,因為拓撲排序反過來就是從尾巴開始的。
4。看資料是30000,所以直接開二維陣列會爆,這個時候就要用到二進位制狀態壓縮,stl庫中有bitset
直接用就ok

**:
#include #include #include #include #include using namespace std;

const int n = 30010;

int n, m;

int h[n], e[n], ne[n], idx;

int d[n], seq[n];//seq存拓撲排序

bitsetf[n];

void add(int a, int b)

void topsort()

int k = 0;

while(!q.empty())

}}int main()

topsort();

for(int i = n - 1; ~i; -- i)

for(int i = 1; i <= n; ++ i) cout << f[i].count() << endl;//統計每個點的二進位制位1的個數就是答案

return 0;

}

可達性統計

題目描述 給定一張n個點m條邊的有向無環圖,分別統計從每個點出發能夠到達的點的數量。n,m 30000。輸入第一行兩個整數n,m,接下來m行每行兩個整數x,y,表示從x到y的一條有向邊。輸出共n行,表示每個點能夠到達的點的數量。樣例輸入 複製樣例資料 10 10 3 82 3 2 55 9 5 92...

可達性統計

題目描述 給定一張n個點m條邊的有向無環圖,分別統計從每個點出發能夠到達的點的數量。輸入格式 第一行兩個整數n,m,接下來m行每行兩個整數x,y,表示從x到y的一條有向邊。輸出格式 輸出共n行,表示每個點能夠到達的點的數量。資料範圍 1 n,m 30000 輸入樣例 10 10 3 82 3 2 5...

問題 A 可達性統計

題目 法一 過程 一開始我直接拿bfs跑,沒有用去重,導致乙個節點重複算了多次,使用了bitset的位運算 去重後,答案才對,bitset 好 bitset還省空間 bitset陣列類似與bool陣列,但是省空間 思路 前向星建圖,將所有的visit u u 初始化為1 自己和自己相連 如果乙個點u...