試題編號:
201709-4
試題名稱:
通訊網路
時間限制:
1.0s
記憶體限制:
256.0mb
問題描述:
問題描述
某國的軍隊由n個部門組成,為了提高安全性,部門之間建立了m條通路,每條通路只能單向傳遞資訊,即一條從部門a到部門b的通路只能由a向b傳遞資訊。資訊可以通過中轉的方式進行傳遞,即如果a能將資訊傳遞到b,b又能將資訊傳遞到c,則a能將資訊傳遞到c。一條資訊可能通過多次中轉最終到達目的地。
由於保密工作做得很好,並不是所有部門之間都互相知道彼此的存在。只有當兩個部門之間可以直接或間接傳遞資訊時,他們才彼此知道對方的存在。部門之間不會把自己知道哪些部門告訴其他部門。
上圖中給了乙個4個部門的例子,圖中的單向邊表示通路。部門1可以將訊息傳送給所有部門,部門4可以接收所有部門的訊息,所以部門1和部門4知道所有其他部門的存在。部門2和部門3之間沒有任何方式可以傳送訊息,所以部門2和部門3互相不知道彼此的存在。
現在請問,有多少個部門知道所有n個部門的存在。或者說,有多少個部門所知道的部門數量(包括自己)正好是n。
輸入格式
輸入的第一行包含兩個整數n, m,分別表示部門的數量和單向通路的數量。所有部門從1到n標號。
接下來m行,每行兩個整數a, b,表示部門a到部門b有一條單向通路。
輸出格式
輸出一行,包含乙個整數,表示答案。
樣例輸入
4 41 2
1 32 4
3 4樣例輸出
樣例說明
部門1和部門4知道所有其他部門的存在。
評測用例規模與約定
對於30%的評測用例,1 ≤ n ≤ 10,1 ≤ m ≤ 20;
對於60%的評測用例,1 ≤ n ≤ 100,1 ≤ m ≤ 1000;
對於100%的評測用例,1 ≤ n ≤ 1000,1 ≤ m ≤ 10000。
//從每個點開頭作為起始點都執行一次深度遍歷,用二維陣列res記錄遍歷結果,
//把起始點能夠到達的點,雙向的標記為1 ,即從u出發到達了v,則res[u][v]和res[v][u]都記為1
//表示u知道v的存在,v知道u的存在
#include#include#includeusing namespace std;
int vis[1005]=;
int res[1005][1005]=;
vectorvec[1005];
int dfs(int u,int v)
for(int i=1;i<=n;i++)
int ans=0;
for(int i=1;i<=n;i++)
if(j>n)ans++;
} cout更多相關ccf的試題解答,>>ccf歷年認證考試解答
CCF 2017 09 04 通訊網路
剛開始想的是dfs進行遍歷,然後統計前後這個節點做能到達的節點個數,但卻發現要是有環的話,就沒法做了,想水水看能得幾分,但卻在處理上有一些問題。蒟蒻。看了題解,原來往dfs裡面傳進去兩個當前節點就可以的,然後用乙個節點負責進行遍歷看子節點,另乙個負責統計它能夠到達的節點。然後進行兩遍for迴圈就能夠...
CCF 201709 4 通訊網路
問題描述 某國的軍隊由n個部門組成,為了提高安全性,部門之間建立了m條通路,每條通路只能單向傳遞資訊,即一條從部門a到部門b的通路只能由a向b傳遞資訊。資訊可以通過中轉的方式進行傳遞,即如果a能將資訊傳遞到b,b又能將資訊傳遞到c,則a能將資訊傳遞到c。一條資訊可能通過多次中轉最終到達目的地。由於保...
ccf 201709 4 通訊網路 100分
問題描述 某國的軍隊由n個部門組成,為了提高安全性,部門之間建立了m條通路,每條通路只能單向傳遞資訊,即一條從部門a到部門b的通路只能由a向b傳遞資訊。資訊可以通過中轉的方式進行傳遞,即如果a能將資訊傳遞到b,b又能將資訊傳遞到c,則a能將資訊傳遞到c。一條資訊可能通過多次中轉最終到達目的地。由於保...