开始图的部分:
第一题:1013 Battle Over Cities (25分)
这个题目大意就是给出一个无向图,现在每次删除其中的一个点,然后问剩余部分需要添加几条边才能连接起来,相当于计算剩余部分的连通区域个数,其实可以用dfs进行遍历,遇到删除点就return停止,然后访问过的点设置为true,然后连通区域个数+1,这样遍历完一遍图就可以统计出来互相独立的连通区域个数。
不过对于这个题我第一想到的是刚学过的并查集,不过由于我是并查集新手,尝试实现的时候并没有达到效果,还好参考了算法笔记豁然开朗。
并查集需要对不同的删除点创建不同的并查集合,然后统计根节点的个数,相对还是比较有意思的。
第二题:1021 Deepest Root (25分)
这个我完全按自己的想法,用了并查集合dfs写出来,提交直接AC,感觉很爽,不过跑出来了900ms,哈哈
这个题其实也可以不用并查集,也可以用一个flag数组配合dfs进行遍历所有节点,这样也可以判断连通分量。
第三题:1034 Head of a Gang (30分)
这个比较复杂,不仅统计连通分量,还要计算每个的权值以及总的权值,
ohh,我写了至少两个小时,改了bfs和dfs,最终竟然都得了20分,而且错的地方都是一样的。。。。。好吧,超出能力。。