CCF 201709-4 通信网络(模拟,DFS)
题意:给一张图,求有几个结点能知道所有的结点
思路:n只有1000,按题意用DFS跑图,再暴力统计答案
代码:
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #include<iostream> 5 #define LL long long 6 #define debug(x) cout << "[" << x << "]" << endl 7 using namespace std; 8 9 const int mx = 1010; 10 struct edge{ 11 int v, nxt; 12 }e[mx*10]; 13 int head[mx], tot = 1; 14 int d[mx][mx]; 15 bool vis[mx]; 16 17 void add(int u, int v){ 18 e[tot].v = v; 19 e[tot].nxt = head[u]; 20 head[u] = tot++; 21 } 22 23 void dfs(int u, int f){ 24 d[u][f] = d[f][u] = 1; 25 vis[u] = 1; 26 for (int i = head[u]; i; i = e[i].nxt){ 27 int v = e[i].v; 28 if (vis[v]) continue; 29 dfs(v, f); 30 } 31 } 32 33 int main(){ 34 int n, m; 35 scanf("%d%d", &n, &m); 36 while (m--){ 37 int u, v; 38 scanf("%d%d", &u, &v); 39 add(u, v); 40 } 41 for (int i = 1; i <= n; i++){ 42 memset(vis, 0, sizeof vis); 43 dfs(i, i); 44 } 45 int ans = 0; 46 for (int i = 1; i <= n; i++){ 47 bool ok = 1; 48 for (int j = 1; j <= n; j++){ 49 if (!d[i][j]){ 50 ok = 0; 51 break; 52 } 53 } 54 if (ok) ans++; 55 } 56 printf("%d\n", ans); 57 return 0; 58 }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步