CCF CSP认证201709-4 通信网络(DFS)

原文链接

我的个人博客

原题链接

201709-4 通信网络(DFS)

思路

  只要两个部门之间连通,不管是发送消息还是接收消息,那么这两个部门都能知道彼此的存在。
由某个部门进行dfs的过程中,访问到的所有其它的部门,  那么这两个部门都是互相知道的。在dfs的过程中标记这两个部门连通,即finds[root][now]=finds[now][root]=1。注意是双向知晓的,不要只记录一个方向的。
所有节点进行dfs遍历,即可。

代码

  前几次提交错误的原因是,我用vector容器来存放知道的部门,这样就会重复的入队。导致一分都木的。然后我用set容器(我原来注释掉的地方),这样就不会有重复的可能性啦。但是运行超时了。能用简单的数据结构解决的,就不要套用复杂的数据结构,有超时的危险。
  倒数第二次得0分的原因是,我申请finds数组的大小是10010*10010。然后运行就出错了。下次还是看清题目,空间够用就好。
在这里插入图片描述

#include <bits/stdc++.h>
using namespace std;
vector<int> v[10010];//存放n个部门的邻接表
//set<int> finds[10010];//存放每个部门知道的其它部门
bool visited[10010];
int finds[1010][1010];
//从节点i进行深度优先遍历 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值