有n個城市,中間有單向道路連線,訊息會沿著道路擴散,現在給出n個城市及其之間的道路,問至少需要在幾個城市發布訊息才能讓這所有n個城市都得到訊息。會了強聯通分量以後呢,我們可以開始寫這道題了。首先這道題不是乙個 dag
dagda
g 我們應該先縮點,把這個圖變成乙個 dag
dagda
g。變成 dag
dagda
g 就好了,我們就可以記錄每個點的入度,答案即為所有入度為 0
00 的點的個數。
#include
using
namespace std;
typedef
long
long ll;
template
<
typename t>
inline
void
read
(t &ff)
template
<
typename t>
inline
void
write
(t x)
const
int maxn=
1e6+
10,maxm=
1e6+10;
int s[maxn]
, stop,dfn[maxn]
,low[maxn]
,scccnt, sccnum[maxn]
,dfscnt,tot,he[maxn]
,ne[maxm<<1]
,ed[maxm<<1]
,n,x,y,de[maxn]
,ans,m;
void
add(
int x,
int y)
inline
void
tarjan
(int now)
elseif(
!sccnum[ed[i]])
}if(dfn[now]
==low[now]
)while
(s[stop]
!=now);}
}int
main()
for(
int i=
1;i<=n;i++)if
(!dfn[i]
)tarjan
(i);
for(
int i=
1;i<=n;i++
)for
(int j=he[i]
;j;j=ne[j])if
(sccnum[i]
!=sccnum[ed[j]
])de[sccnum[ed[j]]]
++;for(
int i=
1;i<=scccnt;i++)if
(!de[i]
)ans++
; cout
}
P2002 訊息擴散
本場比賽第一題,給個簡單的吧,這 100 分先拿著。有n個城市,中間有單向道路連線,訊息會沿著道路擴散,現在給出n個城市及其之間的道路,問至少需要在幾個城市發布訊息才能讓這所有n個城市都得到訊息。輸入格式 第一行兩個整數n,m表示n個城市,m條單向道路。以下m行,每行兩個整數b,e表示有一條從b到e...
P2002 訊息擴散
本場比賽第一題,給個簡單的吧,這 100 分先拿著。有n個城市,中間有單向道路連線,訊息會沿著道路擴散,現在給出n個城市及其之間的道路,問至少需要在幾個城市發布訊息才能讓這所有n個城市都得到訊息。輸入格式 第一行兩個整數n,m表示n個城市,m條單向道路。以下m行,每行兩個整數b,e表示有一條從b到e...
P2002 訊息擴散
本場比賽第一題,給個簡單的吧,這 100 分先拿著。有n個城市,中間有單向道路連線,訊息會沿著道路擴散,現在給出n個城市及其之間的道路,問至少需要在幾個城市發布訊息才能讓這所有n個城市都得到訊息。輸入格式 第一行兩個整數n,m表示n個城市,m條單向道路。以下m行,每行兩個整數b,e表示有一條從b到e...