http://poj.org/problem?id=3352 无向图强连通分量缩点 知道一个等式: 若要使得任意一棵树,在增加若干条边后,变成一个双连通图,那么 至少增加的边数 =( 这棵树总度数为1的结点数 + 1 )/ 2 #include <iostream> #include<cstdio> #include<cstring> #include<stack> #include<algorithm> #include<stdlib.h…
It's almost summer time, and that means that it's almost summer construction time! This year, the good people who are in charge of the roads on the tropical island paradise of Remote Island would like to repair and upgrade the various roads that lead…
http://poj.org/problem?id=3352 题意:给出一个有n个顶点m条边的无向连通图,问至少添加几条边,使删除任意一条边原图仍连通. 思路:一个边双连通图删除任意一条边仍为连通图.故此题即为求原图添加几条边能成为边双连通图.先对无向图中的强连通分量进行缩点,所有的缩点就能构成一棵树,节点之间的连线即为桥.只需将树中的叶子节点相连,就能构成一个边双连通图.叶子节点即为度为1的连通分量.low[i]值相同的点在同一个连通分量中.所加边数=(叶子数+1)/2; #include <…
构造双连通图:一个有桥的连通图,如何把它通过加边变成边双连通图? 一个有桥的连通图,如何把它通过加边变成边双连通图?方法为首先求出所有的桥,然后删除这些桥边,剩下的每个连通块都是一个双连通子图.把每个双连通子图收缩为一个顶点,再把桥边加回来,最后的这个图一定是一棵树,边连通度为1. 统计出树中度为1的节点的个数,即为叶节点的个数,记为leaf.则至少在树上添加(leaf+1)/2条边,就能使树达到边二连通,所以至少添加的边数就是(leaf+1)/2.具体方法为,首先把两个最近公共祖先最远的两个叶…
/* 对于边双连通分支,求法更为简单. 仅仅需在求出全部的桥以后,把桥边删除.\ 原图变成了多个连通块,则每一个连通块就是一个边双连通分支. 桥不属于不论什么 一个边双连通分支,其余的边和每一个顶点都属于且仅仅属于一个边双连通分支. 一个有桥的连通图,怎样把它通过加边变成边双连通图?方法为首先求出全部的桥, 然后删除这些桥边,剩下的每一个连通块都是一个双连通子图.把每一个双连通子图收缩为一个顶点, 再把桥边加回来,最后的这个图一定是一棵树.边连通度为1. 统计出树中度为1的节点的个数,即为叶节点…
首先要强连通缩点,统计新的图的各点的出度和入度. 第一问直接输出入度为0的点的个数 第二问是要是新的图变成一个强连通图,那么每一个点至少要有一条出边和一条入边,输出出度和入度为0的点数大的那一个 注意特判,输入已经是一个极大强连通图的情况,输出 1 0 code /* 无向图强连通的Garbow算法,思路与Tarjan算法相同,实现更直接,效率更好 时间复杂度同样为O(n+m) 思路: dfn记录访问顺序,st为访问栈,tem为辅助栈 每次找到环时,将环中除顺序最靠前的点其他的点全出栈st te…
题目大意:给定一个 N 个点,M 条边的有向图,第一问求至少从多少个点出发才能遍历整个有向图,第二问求至少在这个有向图的基础上加多少条边才能使得该无向图强连通. 题解:先进行 Tarjan 缩点,得到一个 DAG.对于这个 DAG 来说,第一问显然是入度为 0 点的个数.第二问中的每条新边均应该是在出度为 0 点和入度为 0 点之间添加,因此答案是入度为 0 的点的个数和出度为 0 点的个数的最大值.另外,若只有一个强联通分量的话,需要特判. 代码如下 #include <bits/stdc++…
1.有一张无向图,现在要给每个点染上黑色或白色,最后每个点的染色代价是它与离这个点最近的不同色节点的距离.求最小代价.所有边权$\geq 0$且互不相同. 分三种情况: 两点都染了色:两点都跟其它点算过最小距离了,不用管. 一点染了色:相当于扩展连通块,染了色的点向没染色的点扩展染色,颜色相同. 两点都没染色:两点直接相连(且边长是最短距离). 2.题目大意同上,求得到最小代价的方案数. 0的边两边的点有多少个子树,方案数就累加上2的多少次方. 3.一张无向图,给每条边染两种颜色之一,使每个度大…
章·五:2019-07-15:明月不谙离恨苦,斜光到晓穿朱户 ·昨日小结: 昨天考试又是爆零边缘,除了难过就剩难过了. T1暴力打崩了只拿了5分. T2没给分时间.最后20分钟打了个残码.没仔细观察数据范围,应该骗到手的15分菊花图和5分链都没看到. T3推了一半的式子,容斥和dp都推出来了,就差g数组辅助,但是没有时间了…… 我好失败啊…… 还是自己太渣,别找客观借口. 继续努力吧.这次考试都来了,下次考试还会远吗/恐惧.jpg ·今日进度 [0714模拟赛]A.(暴搜) 又是一道论暴搜艺术的…
一.dfs框架: vector<int>G[maxn]; //存图 int vis[maxn]; //节点访问标记 void dfs(int u) { vis[u] = ; PREVISIT(u); //访问节点u之前的操作 int d = G[u].size(); ; i < d; i++)//枚举每条边 { int v = G[u][i]; if(!vis[v])dfs(v); } POSTVISIT(u); //访问节点u之后的操作 } 二.无向图连通分量 void find_cc…