詳細注釋 201709 4 通訊網路

2021-10-03 14:06:59 字數 1055 閱讀 2794

本題中對每個點進行一次dfs

該次dfs對與該點互知的點進行標記**(收到資訊和接收資訊均可知道對方存在)**

最後檢視每個點是否知道每個點的存在

剛開始,也是對每個點dfs,

但每次只是將所能到達的點計數,已經到達過的點就跳過;

另外做乙個長度為n的陣列,對於本次dfs到達的點,讓該點在這個陣列中的數加一,也就是說,該陣列[i]表示能到第i個點的數量

這樣就去往某點和到達某點分開判斷

但是會重複,即既能到達所有點,又能接收到所有點的訊息,這樣的點重複計數了

#include

"pch.h"

#include

#include

#include

#include

using namespace std;

const

int n =

1000+1

;const

int m =

10000+1

;vector<

int> links[n +1]

;// 記錄沒個點作為起點的邊

int visited[n +1]

=;// 用於在dfs中標識是否訪問過

int counter[n +1]

[n +1]

=;// i,j 標識第i個人知道第j個人的存在,彼此是互相知道的,因此矩陣總是對稱的

int from =0;

// 標識本次dfs的源點是哪乙個

int n, m;

void

dfs(

int i)

}int

main()

for(

int i =

1; i <= n; i++

)int cnt =0;

for(

int i =

1; i <= n; i++)}

if(flag)

cnt++;}

cout << cnt << endl;

return0;

}

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。一條資訊可能通過多次中轉最終到達目的地。由於保...

CCF 2017 09 04 通訊網路

剛開始想的是dfs進行遍歷,然後統計前後這個節點做能到達的節點個數,但卻發現要是有環的話,就沒法做了,想水水看能得幾分,但卻在處理上有一些問題。蒟蒻。看了題解,原來往dfs裡面傳進去兩個當前節點就可以的,然後用乙個節點負責進行遍歷看子節點,另乙個負責統計它能夠到達的節點。然後進行兩遍for迴圈就能夠...