題目
法一:過程:一開始我直接拿bfs跑,沒有用去重,導致乙個節點重複算了多次,使用了bitset的位運算|去重後,答案才對,bitset**好(bitset還省空間);bitset陣列類似與bool陣列,但是省空間
思路:前向星建圖,將所有的visit[u][u]初始化為1(自己和自己相連),如果乙個點u只和本身相連就dfs一下,遍歷所有與u相連的點v,visit[u]=visit[u]|visit[v] ,並一下則所有使visit[t][i]=1成立的i都能使visit[u][i]=1(因為u和v相連,所以所有和v相連的點都和u相連)到出度為0的節點(即head[u]==0)返回;
#include
#include
#include
#include
using namespace std;
struct node
e[30005];
int head[
30005]=
;int cnt=1;
bitset<
30005
>visit[
30005];
///開乙個大小為30005的位元組陣列,陣列中每個元素的長度為30005(每一位為0或1)
void
add(
int u,
int v)
; head[u]
=cnt++;}
inline
void
ini(
int n)
void
dfs(
int u)
for(
int i=head[u]
;i;i=e[i]
.next)
}int
main()
for(
register
int i=
1;i<=n;i++
)return0;
}
法二:
思路:拓撲排序一下,按逆序來遍歷節點,先初始化visit[u][u]=1,將該節點u的visit[u]與所有與其相連的節點v visit[u]|=visit[v]即可
#include
#include
#include
#include
using namespace std;
struct node
e[30005];
int head[
30005]=
;int top[
30005];
int deg[
30005];
int cnt=
1,tot=1;
bitset<
30005
>visit[
30005];
void
add(
int u,
int v)
; head[u]
=cnt++
; deg[v]++;
}void
topsort
(int n)}}
intmain()
topsort
(n);
for(
int i=tot-
1;i>=
1;i--)}
for(
int i=
1;i<=n;i++
)printf
("%d\n"
,visit[i]
.count()
);return0;
}
型別題
#include
#include
using namespace std;
const
int n=
200;
char name1[50]
,name2[50]
;char name[n+5]
[50];
struct node
e[3005];
int head[
3005]=
;int top[
3005];
int deg[
3005];
int cnt=
1,tot=1;
bitset<
305>visit[
305]
;void
add(
int u,
int v)
; head[u]
=cnt++
; deg[v]++;
}inline
void
ini(
int n)
void
dfs(
int u)
for(
int i=head[u]
;i;i=e[i]
.next)
//cout<}
intmain()
else}if
(flag==0)
flag=0;
for(
int i=
1;iif(flag==0)
//a[r][s]=-1;
add(s,r);}
}ini
(k);
for(
int i=
1;i(visit[i]
.count()
==1)dfs
(i);
for(
int i=
1;i<=m;i++)}
if(j==k) flag=1;
for(j=
1;jif(j==k) flag=1;
//cout<<"s="(flag==1)
else
}return0;
}
可達性統計
題目描述 給定一張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...
可達性統計
給定一張n個點m條邊的有向無環圖,分別統計從每個點出發能夠到達的點的數量。輸入格式 第一行兩個整數n,m,接下來m行每行兩個整數x,y,表示從x到y的一條有向邊。輸出格式 輸出共n行,表示每個點能夠到達的點的數量。資料範圍 1 n,m 300001 n,m 30000 輸入樣例 10 10 3 82...