[kuangbin带你飞]专题九 连通图题解报告-差1题

来源:互联网 发布:linux cpu 进程 编辑:程序博客网 时间:2024/05/21 06:39

poj1236 Network of Schools

  1. 先用tarjan计算强连通分量缩点
  2. 统计缩点后的点的入度和出度
  3. A问的是最少需要发布多少份,即入度为0的点有几个
  4. B问的是最少添加几条边可以使只有一个强连通分量,即统计出度为0的点的个数,如果A大于B,输出两个A
  1. 题意:给你一张图,问有多少割边
  2. 输入数据格式比较特殊,例如:0 (1) 1。所以采用下面这种方式输入scanf("%d",&u);scanf(" (%d)%c",&m,&ch);
  3. 图中会用多个连通块,所以要采用标记数组,查看哪些点没有访问过
  4. 之后就是求割边的模版套进去就结束了

hdu4738 Caocao’s Bridges

  1. 求割边问题,找出权值最小的一条割边
  2. 考虑图不连通时,输出-1
  3. 如果权值最小为零时,输出应该是1(最少需要一个人去炸桥)

uva315 Network

  1. 求割点问题,题意比较难读懂……
  2. 割点条件搜索的根节点有两个或两个以上子节点
  3. 普通的节点u,有一个子节点v,满足low[v]>=low[u]

poj3177 Redundant Paths

  1. 题意:给你一张无向连通图,判断至少添加多少条边,才能使任意两点之间至少有两条相互“边独立”的道路
  2. 求出强连通分量,用并查集缩点
  3. 最少边数=(缩点后的树中度为1的节点数+1)/2

hdu4612 Warm up

  1. 题意:给你一张无向图,问添加一条边最多消去原图中多少桥?
  2. 先找出桥,之后在dfs搜索不走桥,将联通块标记出来,再按桥将联通块连接起来构成新图
  3. 问题转换成新图中最长的一条路是多少,变成求树的直径问题。随便找一点dfs,找出搜索到最远的点,再从最远的点开始搜索,找出最远的距离就是树的直径

hdu4635 Strongly connected

  1. 题意:给定一张有向图,问最多能再添加几条边(不出现重边)使图不是强连通图
  2. 一张n个顶点的图,最多不重复的边是n*(n-1)条。图变成强联通图的情况是,在符合条件的情况下多增加了一条边。所以,假设那种情况下已经有两个点的集合x和y,如果x在向y连接一条边就变成强连通图。x集合内部都是强连通,y集合内部都是强连通,x内每个顶点都有到y内每个顶点都有一条边。这种情况下的边数是x*(x-1)+y*(y-1)+x*y,化解一下就是n*n-n-m-x*y,之后只要x内的点最小的,就是结果最大。
  3. 满足上面条件的x,只需要找连通块的入度或出度中有一个为零即可。

poj3694 Network

  1. 题意:先给定一张无向图,之后在给出一些边,问每次增加一条边后,图中还会有多少条桥?
  2. 先用tarjan将图的点合并到连通分量中,再更具桥来建立一张新的图。
  3. 问题可以转换成LCA最近公共祖先来解决,先用dfs对图分层和记录每一点的祖先,每次查询找出公共祖先,然后统计一下一共有多少桥。考虑到每次加入一条边后,会有桥消失,所以用并查集来跳过已经删除的桥
  4. 模版写错导致WA了好几次……谨记
0 0
原创粉丝点击