本場比賽第一題,給個簡單的吧,這 100 分先拿著。
有n個城市,中間有單向道路連線,訊息會沿著道路擴散,現在給出n個城市及其之間的道路,問至少需要在幾個城市發布訊息才能讓這所有n個城市都得到訊息。
輸入格式:
第一行兩個整數n,m表示n個城市,m條單向道路。
以下m行,每行兩個整數b,e表示有一條從b到e的道路,道路可以重複或存在自環。
輸出格式:
一行乙個整數,表示至少要在幾個城市中發布訊息。
輸入樣例#1:複製
5 4輸出樣例#1:複製1 22 1
2 35 1
2【資料範圍】
對於20%的資料,n≤200;
對於40%的資料,n≤2,000;
對於100%的資料,n≤100,000,m≤500,000.
【限制】
時間限制:1s,記憶體限制:256m
【注釋】
樣例中在4,5號城市中發布訊息。、
題意:很明顯的乙個tarjan+縮點,直接套模板,然後輸出縮點**度為0的點的個數,注意在輸入的過程中避免成環,應該先來乙個判定,其餘**如下
#includeusing namespace std;
const int maxn = 500010;
int n, m, cnt = 1, a, b, index, sum, total, ans;
int dfn[maxn], low[maxn], belong[maxn], indu[maxn], vis[maxn], stack[maxn], head[maxn];
struct nodenode[2 * maxn];
void add(int u, int v)
void tarjan(int u) else if (vis[v])
} if (low[u] == dfn[u]) while (stack[index + 1] != u); }}
int main()
for (int i = 1; i <= n; i++)
for (int i = 1; i <= n; i++)
} }for (int i = 1; i <= sum; i++)
cout << ans << endl;
return 0;
}
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 訊息擴散
有n個城市,中間有單向道路連線,訊息會沿著道路擴散,現在給出n個城市及其之間的道路,問至少需要在幾個城市發布訊息才能讓這所有n個城市都得到訊息。會了強聯通分量以後呢,我們可以開始寫這道題了。首先這道題不是乙個 dag dagda g 我們應該先縮點,把這個圖變成乙個 dag dagda g。變成 d...