传送门:Warm up题意:询问如何加一条边,使得剩下的桥的数目最少,输出数目。分析:tarjan缩点后,重新建图得到一棵树,树上所有边都为桥,那么找出树的直径两个端点连上,必定减少的桥数量最多,因此ans=树的边数-树的直径。#pragma comment(linker,"/STACK:10240...
分类:
其他好文 时间:
2015-02-08 16:44:18
阅读次数:
129
传送门:Redundant Paths题意:有n个牧场,Bessie 要从一个牧场到另一个牧场,要求至少要有2条独立的路可以走。现已有m条路,求至少要新建多少条路,使得任何两个牧场之间至少有两条独立的路。两条独立的路是指:没有公共边的路,但可以经过同一个中间顶点。分析:在同一个边双连通分量中,任意两...
分类:
其他好文 时间:
2015-02-08 14:04:27
阅读次数:
143
ppt:http://pan.baidu.com/s/1eQBzFqE
入门知识汇总:
经典DP: LIS LCS, 状态压缩DP 区间DP
图论:MST , 最短路三种算法(dijkstra , bellman ford, floyd ),最大流, 双连通分量(点双连通,边双连通,强连通)
数学:质因数分解,筛素数,数论的常用结论
数据结构: 线段树,树状数组,字典树,kmp,哈希,平...
分类:
其他好文 时间:
2015-02-02 15:56:13
阅读次数:
279
构造双连通图:一个有桥的连通图,如何把它通过加边变成边双连通图?一个有桥的连通图,如何把它通过加边变成边双连通图?方法为首先求出所有的桥,然后删除这些桥边,剩下的每个连通块都是一个双连通子图。把每个双连通子图收缩为一个顶点,再把桥边加回来,最后的这个图一定是一棵树,边连通度为1。统计出树中度为1的节...
分类:
其他好文 时间:
2015-01-19 22:29:19
阅读次数:
121
裸题只给模板。
tarjan可以实现。
太水不发题解。
代码:
#include
#include
#include
#include
#define N 1010
#define M 2020
using namespace std;
struct KSD
{
int v,next;
}e[M];
int head[N],cnt;
inline void add(int u,i...
分类:
其他好文 时间:
2015-01-13 10:42:59
阅读次数:
115
题意:求哪些点是割点,割掉以后能把图分成几块。
太水不欲发题解。
tarjan就好,不懂看代码。
代码:
#include
#include
#include
#include
#define N 1005
using namespace std;
int map[N][N];
bool exist[N];
int dfn[N],low[N],cnt;
int stk[N],top...
分类:
其他好文 时间:
2015-01-13 10:42:00
阅读次数:
162
给出一个无向图,保证是连通的,问要把这个无向图变成边双连通图需要至少修建几条新路。...
分类:
其他好文 时间:
2014-12-28 10:26:58
阅读次数:
150
比起双连通的Tarjan我倒是觉得反而简单多了。思想和双连通分量是同一个模式。
#include
#include
#include
#include
using namespace std;
const int N = 1e5;
int dfn[N], scc_id[N];
int deep, scc_cnt;
stack s;
int dfs(int u)
{
int ...
分类:
其他好文 时间:
2014-12-26 18:40:43
阅读次数:
172
比起求无向图关节点的算法,只是多了一个栈,用来储存不存在关节点的所有边,遇到关节点之后弹出所有边进行储存
int dfs(int u, int fa)
{
int lowu = dfn[u] = ++deep;
int son = 0;
for(int i = head[u]; ~i; i = e[i].next) {
int v = e[i].v;
...
分类:
其他好文 时间:
2014-12-26 06:13:59
阅读次数:
206