您的位置:首页 > 其它

ZOJ3811 - Untrusted Patrol(并查集 或者 bfs dfs)

2014-09-11 09:38 309 查看
ZOJ Problem Set - 3811

Untrusted Patrol
题链:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3811
题目大意是说给你一个图(无向)在其中几个节点上放一个监视器,它会记录你第一次经过它的时间,boss想验证保安是否能按照经过监视器的顺序
遍历所有节点(监视器节点可以经过多次,但只记录一次)
我的方法:
1.用vector数组创建不确定大小的二维数组(edge);
2.对于任一节点i,根据图的边加入所有所有与i相连接的点到edge[i]中;
3.bfs得到答案(count_表示访问过的节点数,count表示访问过的监视点数):第一个监视器节点入队列,逐渐加入其相邻节点,如果相邻节点j不是监
视点且未被访问,直接加入队列,count_+1,标记为已访问(rec[j] = 1)如果j是监视点,但不是下一个被记录的监视点,标记为有路径可访问(有路径
可访问但是顺序上不允许,rec[j] = 2),如果j是下一个被记录的监视点,直接加入队列,count_+1,count+1,标记为已访问(rec[j] = 1),然后将j后
连续的标记为“2”值的监视点(假设是k个)全部加入,加入队列,count_+k,count+k(此时可以按顺序访问它们);
4.只有在count , count_ 分别和
总监视点数 以及 总节点数相等的时候才输出Yes
童鞋的方法:
童鞋并未用bfs,他用并查集写的,先把所有的非监视点集合出来,然后按照监视点记录的顺序加入监视点以及相邻的边,然后验证相邻两个监视点
是否同有一个父亲节点,有就是可以。这个方法要注意最后一定要判断这个图是不是联通的,因为它对于单个孤立节点是没法判断的!
give you 他的链接:http://hnnwang.github.io/blog/2014/09/08/bing-cha-ji-mo-ban/
以下是bfs的代码:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: