题目大意:
给你一个无向图,然后再给你一个Q代表有Q次询问,每一次加一条边之后还有几座桥。在这里要对重边进行处理。
每次加入一条边之后,在这条搜索树上两个点的公共祖先都上所有点的桥都没了。
这里重边的处理上要说一下, 我以前第一写的时候根本没考虑这个问题,但是居然过了。。。过了。。。  很扯淡,但是重边的问题确实是存在、
这里我们 使用一个 bridge 数组来保存桥, 因为有重边的存在  只有 bridge 数量为 1 的时候这个路径才算是桥,否则则不是桥
bridge[i] 是指  i 和 father[i] 是一座桥
 
题目大意:
给你一个无向图,然后再给你一个Q代表有Q次询问,每一次加一条边之后还有几座桥。在这里要对重边进行处理。
每次加入一条边之后,在这条搜索树上两个点的公共祖先都上所有点的桥都没了。
这里重边的处理上要说一下, 我以前第一写的时候根本没考虑这个问题,但是居然过了。。。过了。。。  很扯淡,但是重边的问题确实是存在、
这里我们 使用一个 bridge 数组来保存桥, 因为有重边的存在  只有 bridge 数量为 1 的时候这个路径才算是桥,否则则不是桥
bridge[i] 是指  i 和 father[i] 是一座桥
 
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <queue>
#include <cmath>
#include <stack>
#include <cstring>
usingnamespace std;
#define INF 0xfffffff
#define min(a,b) (a<b?a:b)
#define maxn 100005
int m, n, Time, ans;
int dfn[maxn], low[maxn], Father[maxn], bridge[maxn];
vector<int> G[maxn]; void init()
{
memset(dfn, 0, sizeof(dfn));
memset(low, 0, sizeof(low));
memset(bridge, 0, sizeof(bridge));
memset(Father, 0, sizeof(Father));
Time = ans = 0; for(int i=0; i<=n; i++)
G[i].clear();
} void Tarjan(int u,int fa)
{
dfn[u] = low[u] = ++Time;
Father[u] = fa;
int len = G[u].size(), v; for(int i=0; i<len; i++)
{
v = G[u][i]; if( !low[v] )
{
Tarjan(v, u);
low[u] = min(low[u], low[v]); if(dfn[u] < low[v])
{
bridge[v] ++;
ans ++;
}
}
elseif(v != fa)
{
low[u] = min(low[u], dfn[v]); if(dfn[u] < low[v])
{
bridge[v] ++;
ans --;
}
} }
}
void Lca(int a,int b)
{
if(a == b)
return ; if(dfn[a] > dfn[b])
{
if( bridge[a] == 1)
{
bridge[a] = 0;
ans --;
}
Lca(Father[a], b);
}
else
{
if(bridge[b] == 1)
{
bridge[b] = 0;
ans --;
}
Lca(a, Father[b]);
}
} int main()
{
int cas = 1;
while(scanf("%d %d",&n, &m), m+n)
{
int Q, a, b;
init();
while(m --)
{
scanf("%d %d",&a, &b);
G[a].push_back(b);
G[b].push_back(a);
} scanf("%d", &Q);
Tarjan(1, 0);
// printf("%d\n", ans);
printf("Case %d:\n", cas ++);
while(Q --)
{
scanf("%d %d",&a, &b);
Lca(a, b);
printf("%d\n", ans);
}
}
return0;
}
/* 4 4
1 2
2 1
2 3
1 4
2
1 2
3 4 */

POJ 3694 Network(无向图求桥+重边处理+LCA)的更多相关文章

  1. POJ 3694 Network (求桥,边双连通分支缩点,lca)

    Network Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 5619   Accepted: 1939 Descripti ...

  2. POJ 3694 Network 无向图双联通+LCA

    一开始题目没看清楚,以为是增加那条边后还有多少桥,所以就当做是无向图tarjan缩点后建树,然后求u,v的最近公共祖先,一直wa. 后来再看题目后才发现边放上去后不会拿下来了,即增加i条边后桥的数量. ...

  3. poj 1144 Network 无向图求割点

    Network Description A Telephone Line Company (TLC) is establishing a new telephone cable network. Th ...

  4. POJ 3694 Network(Tarjan求割边+LCA)

    Network Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 10969   Accepted: 4096 Descript ...

  5. HDU 4738--Caocao's Bridges(重边无向图求桥)

    Caocao's Bridges Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  6. Poj 3694 Network (连通图缩点+LCA+并查集)

    题目链接: Poj 3694 Network 题目描述: 给出一个无向连通图,加入一系列边指定的后,问还剩下多少个桥? 解题思路: 先求出图的双连通分支,然后缩点重新建图,加入一个指定的边后,求出这条 ...

  7. UVA 796 Critical Links(无向图求桥)

    题目大意:给你一个网络要求这里面的桥. 输入数据: n 个点 点的编号  (与这个点相连的点的个数m)  依次是m个点的   输入到文件结束. 桥输出的时候需要排序   知识汇总: 桥:   无向连通 ...

  8. UVA 796 Critical Links(模板题)(无向图求桥)

    <题目链接> 题目大意: 无向连通图求桥,并将桥按顺序输出. 解题分析: 无向图求桥的模板题,下面用了kuangbin的模板. #include <cstdio> #inclu ...

  9. 【并查集缩点+tarjan无向图求桥】Where are you @牛客练习赛32 D

    目录 [并查集缩点+tarjan无向图求桥]Where are you @牛客练习赛32 D PROBLEM SOLUTION CODE [并查集缩点+tarjan无向图求桥]Where are yo ...

随机推荐

  1. Android(java)学习笔记213:开源框架post和get方式提交数据(qq登录案例)

    1.前面提到Http的get/post方式  . HttpClient方式,实际工作的时候不常用到,因为这些方式编写代码是很麻烦的 2.Android应用会经常使用http协议进行传输,网上会有很完善 ...

  2. css考核点整理(十)-响应式开发经验,响应式页面的三种核心技术是什么

    响应式开发经验,响应式页面的三种核心技术是什么

  3. php代码优化技巧

    搬运: 1. 尽量采用大量的PHP内置函数. 2. echo 比print 快. 3. 不要把方法细分得过多,仔细想想你真正打算重用的是哪些代码? 4. 在执行for循环之前确定最大循环数,不要每循环 ...

  4. android MediaCodec 音频编解码的实现——转码

    原文地址:http://blog.csdn.net/tinsanmr/article/details/51049179 从今天开始 每周不定期更新博客,把这一周在工作与学习中遇到的问题做个总结.俗话说 ...

  5. codevs 3052 多米诺 二分图匹配

    /*codevs 3052 二分图匹配 把矩阵分两批 黑和白 且黑白不相交 这就构成了二分图的两部分 然后求最大匹配*/ #include<cstdio> #include<cstr ...

  6. typeerror $.ajax is not a function

    在web开发中使用jQuery进行前端开发遇到这么个问题,纠结了很久终于解决了,下面说一下解决方法. 大家可以参照下面几种排查的方法. 1.首先检查是否引用jQuery的库. 2.页面如果使用的ifr ...

  7. post和get的区别?

    1. get是从服务器上获取数据,post是向服务器传送数据.2. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到.post是通过H ...

  8. 用java写bp神经网络(二)

    接上篇. Net和Propagation具备后,我们就可以训练了.训练师要做的事情就是,怎么把一大批样本分成小批训练,然后把小批的结果合并成完整的结果(批量/增量):什么时候调用学习师根据训练的结果进 ...

  9. 【转】 KVC/KVO原理详解及编程指南

    原文地址:http://blog.csdn.net/wzzvictory/article/details/9674431 前言: 1.本文基本不讲KVC/KVO的用法,只结合网上的资料说说对这种技术的 ...

  10. 绘图quartz之加水印

      实现在图片上加一个水印  并存在document的路径下  同时在手机相册中也存一份 //首先开启imageContext找到图片     UIGraphicsBeginImageContext( ...