CH2101 可達性統計

2021-09-14 02:15:41 字數 974 閱讀 5883

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

輸入格式

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

輸出格式

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

題解:從點x出發能夠到達的點構成的集合是f(x),有:

f(x)=u(u存在有向邊(x,y) f(y)),

從x出發能夠到達的點,是從「x的各個後繼點y」出發能夠到達的點的並集,再並上x自身。可以按照拓撲序的倒序進行計算。集合的並集計算可以利用狀態壓縮,用乙個n位的二進位制數表示可達的節點,bitset做乙個或運算即可。

#include

#include

#include

using namespace std;

typedef

long

long ll;

const

int maxn =

30000+5

;int n,m,cnt=0;

int n1,n2;

bitset bs[maxn]

;int ver[maxn]

,next[maxn]

,head[maxn]

,deg[maxn]

,a[maxn]

;int tot=0;

void

add(

int x,

int y)

void

topsort()

while

(q.size()

)}}int

main()

topsort()

;for

(int i=cnt;i>0;

--i)

}for

(int i=

1;i<=n;i++

)return0;

}

bitset用法和ch2101可達性統計

第一次嘗試使用markdown文字,可能編輯不好,見諒咕咕咕 題目咳咳下面步入正題,關於這種題目,看到的第一眼應該能想到相當於動規的遞推,但是要求邊界如果直接dfs,30000的資料不知道你家的棧能不能受的住 所以這個題目提供了乙個很好的思路,就是先求出拓撲序然後反過來乙個乙個求,這樣可以保證求當前...

2101 可達性統計

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

可達性統計

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