摘要: 题意:在一张无向图中去掉每一个点问你连通分支有几个?输出排序前m大的。排序规则是先按连通分支数降序,再按结点标号升序。思路:求割点的变通,我们知道在dfs树中除去根节点,若当前节点是割点,那么删去它所得到的连通分支数就是子树的数量+1,而对于根节点就等于子树的数量。所以我们在dfs求割点的时候一旦发现一个子树中的所有点都无法回溯到根节点以前的祖先我们就认为找到了删去它的一个连通分支cut[i]++就可以了。最后有序输出就行了。代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #incl... 阅读全文
posted @ 2014-01-19 21:39 张小豪 阅读(528) 评论(0) 推荐(0) 编辑
摘要: 题意:这道题主要是定义了一个交叫爪子的图:然后他会给你一个每个结点度数都是三的无向图。问你能否能否拆成爪子图。(就是分成若干个子图,原图中的每条边都只能在一张子图中出现一次,点可以重复出现)。思路:这道题我们可以画几个推理一下,会发现一个结论当且仅当图是而分图的时候是可以的,然后剩下来的就是染色判定了。代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #define MP(a, b) make_pair(a, b)... 阅读全文
posted @ 2014-01-19 14:05 张小豪 阅读(292) 评论(0) 推荐(0) 编辑
摘要: 题意:每头牛都想成为牛群中的红人。给N头牛的的牛群和M个有序对(A,B)。(A,B)表示牛A认为B是红人。该关系具有传递性,所以如果牛A认为B是红人,牛B认为牛C是红人,那么牛A也认为牛C是红人。不过,给定的有序对中可能包含(A,B)和(B,C),但不包含(A,C)。求被其他牛认为是红人的总数。思路:方法是是找到拓扑排序最后的那个强连通分量在统计他是不是能访问到所有的结点就OK了。代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #inc... 阅读全文
posted @ 2014-01-19 13:16 张小豪 阅读(211) 评论(0) 推荐(0) 编辑
摘要: 题意:告诉你一张无向图,问你构造边双连通分支,需要加最小的边。思路:发现这两道题可以用一份代码过掉0.0。真是搞笑,题目意思基本相同。主要就是知道如何构造边双连通分支,原来的双连通分支数记为n那么ans = (n+1)/2这个结论是可以证明的。这里我们就把他记住就好了。至于题目的做法就是统计边双连通分支数,直接上模版。代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #define MP(a... 阅读全文
posted @ 2014-01-19 11:35 张小豪 阅读(290) 评论(0) 推荐(0) 编辑