摘要: 问加一条边,最少可以剩下几个桥。先双连通分量缩点,形成一颗树,然后求树的直径,就是减少的桥。本题要处理重边的情况。如果本来就两条重边,不能算是桥。还会爆栈,只能C++交,手动加栈了别人都是用的双连通分量,我直接无向图改成有向图搞得强连通水过。 1 #pragma comment(linker, "/STACK:1024000000,1024000000") 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 10 using namespace std; ... 阅读全文
posted @ 2013-08-11 17:49 某某。 阅读(425) 评论(0) 推荐(0) 编辑
摘要: 先说一下割点跟割边吧。割桥就是如果一个连通图里删除这条边之后,这个图会变成两个连通图,那么这条边就称之为割桥。这是割桥的代码,里面呆着lca求法。割点和割桥的就是用一个时间戳和回到祖先确定。用dfs的时间戳可以看出。割点为low[v] >= dfn[u]割边为low[v] > dfn[u]。但是要注意的是割点的条件对于搜索树的根节点是要特殊处理的,当根节点的孩子大于1的时候就一定是割点。 1 void tarjan(int u,int pre) 2 { 3 int v,i,j; 4 dfn[u] = low[u] = ++dfsclock; 5 loop(0,i,g[u... 阅读全文
posted @ 2013-08-11 17:14 某某。 阅读(141) 评论(0) 推荐(0) 编辑