题目链接:http://poj.org/problem?id=3694

Description

A network administrator manages a large network. The network consists of N computers and M links between pairs of computers. Any pair of computers are connected directly or indirectly by successive links, so data can be transformed between any two computers. The administrator finds that some links are vital to the network, because failure of any one of them can cause that data can't be transformed between some computers. He call such a link a bridge. He is planning to add some new links one by one to eliminate all bridges.

You are to help the administrator by reporting the number of bridges in the network after each new link is added.

Input

The input consists of multiple test cases. Each test case starts with a line containing two integers N( ≤ N ≤ ,) and M(N -  ≤ M ≤ ,).
Each of the following M lines contains two integers A and B ( ≤ A ≠ B ≤ N), which indicates a link between computer A and B. Computers are numbered from to N. It is guaranteed that any two computers are connected in the initial network.
The next line contains a single integer Q ( ≤ Q ≤ ,), which is the number of new links the administrator plans to add to the network one by one.
The i-th line of the following Q lines contains two integer A and B ( ≤ A ≠ B ≤ N), which is the i-th added new link connecting computer A and B. The last test case is followed by a line containing two zeros. Output For each test case, print a line containing the test case number( beginning with ) and Q lines, the i-th of which contains a integer indicating the number of bridges in the network after the first i new links are added. Print a blank line after the output for each test case. Sample Input Sample Output Case : Case :

题目大意:有N个点,M条边,添加Q条边,问每填一条边,还有几条桥?

#include<stdio.h>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<queue>
#include<math.h>
#include <stack>
using namespace std;
#define ll long long
#define INF 0x3f3f3f3f
#define met(a,b) memset(a,b,sizeof(a))
#define mod 2147493647
#define N 100100
int low[N],dfn[N],vis[N];
int fa[N];
int n,t,ans;
int bin[N];
vector<vector<int> >Q;
void init()
{
met(low,);
met(dfn,);
t=;
Q.clear();
Q.resize(n+);
met(bin,);
met(fa,);
}
void tarjin(int u,int f)
{
low[u]=dfn[u]=++t;
fa[u]=f;
int l=Q[u].size();
for(int i=; i<l; i++)
{
int v=Q[u][i];
if(!dfn[v])
{
tarjin(v,u);
low[u]=min(low[u],low[v]);
if(dfn[u]<low[v])///开始没被查找,可能是桥
{
bin[v]++;
ans++;
}
}
else if(f!=v)
{
low[u]=min(low[u],dfn[v]);
if(dfn[u]<low[v])///被查找过,有两条路通这个点,不是桥
{
bin[v]--;
ans--;
}
}
}
}
void LCR(int a,int b)
{
if(a==b)
return ;
if(dfn[a]<dfn[b])
{
if(bin[b]==)
{
bin[b]=;
ans--;
}
LCR(a,fa[b]);
}
else
{
if(bin[a]==)
{
bin[a]=;
ans--;
}
LCR(fa[a],b);
}
}
int main()
{
int m,e,f;
int cot=,q;
while(scanf("%d %d",&n,&m),n+m)
{
init();
ans=;
for(int i=; i<m; i++)
{
scanf("%d %d",&e,&f);
Q[e].push_back(f);
Q[f].push_back(e);
}
tarjin(,-);
scanf("%d",&q);
printf("Case %d:\n",cot++);
while(q--)
{
scanf("%d %d",&e,&f);
LCR(e,f);
printf("%d\n",ans);
}
}
return ;
}

(POJ 3694) Network 求桥个数的更多相关文章

  1. poj 3694 无向图求桥+lca

    题意抽象为: 给一个无向图和一些询问 对于每一次询问: 每次询问都会在图上增加一条边 对于每一次询问输出此时图上桥的个数. 桥的定义:删除该边后原图变为多个连通块. 数据规模:点数N(1 ≤ N ≤ ...

  2. POJ 3694 Network ——(桥 + LCA)

    题意:给n个点和m条边,再给出q条边,问每次加一条边以后剩下多少桥. 分析:这题是结合了LCA和dfn的妙用._dfn数组和dfn的意义不一样,并非访问的时间戳,_dfn表示的是被访问的顺序,而且是多 ...

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

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

  4. POJ 3694——Network——————【连通图,LCA求桥】

    Network Time Limit:5000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Stat ...

  5. Network POJ - 3694 无向图找桥

    题意: 给你一个无向图,你需要找出来其中有几个桥 桥: 1.存在重边必定不为桥 2.low[v]>dfn[u] 代码: //题意很清晰 //就是这个需要先找出来原无向图中的桥个数,然后在判断添加 ...

  6. POJ 3694 无向图的桥

    Network Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 10404   Accepted: 3873 Descript ...

  7. kuangbin专题 专题九 连通图 POJ 3694 Network

    题目链接:https://vjudge.net/problem/POJ-3694 题目:给定一个连通图,求桥的个数,每次查询,加入一条边,问加入这条边后还有多少个桥. 思路:tarjan + 并查集 ...

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

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

  9. POJ 3694 Network(并查集缩点 + 朴素的LCA + 无向图求桥)题解

    题意:给你一个无向图,有q次操作,每次连接两个点,问你每次操作后有几个桥 思路:我们先用tarjan求出所有的桥,同时我们可以用并查集缩点,fa表示缩点后的编号,还要记录每个节点父节点pre.我们知道 ...

随机推荐

  1. Codeforces Round #280 (Div. 2) C. Vanya and Exams 贪心

    C. Vanya and Exams Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/492/pr ...

  2. Codeforces Round #326 (Div. 2) C. Duff and Weight Lifting 水题

    C. Duff and Weight Lifting Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest ...

  3. Windows 7系统安装MySQL5.5.21图解

    Win7系统安装MySQL5.5.21图解 大家都知道MySQL是一款中.小型关系型数据库管理系统,非常具有有用性,对于我们学习非常多技术都有帮助,前几天我分别装了SQL Server 2008和Or ...

  4. Thread+Handler 线程 消息循环(转载)

    近来找了一些关于android线程间通信的资料,整理学习了一下,并制作了一个简单的例子. andriod提供了 Handler 和 Looper 来满足线程间的通信.例如一个子线程从网络上下载了一副图 ...

  5. iOS开发——网络编程Swift篇&(一)网络监测

    网络监测 enum ReachabilityType { case WWAN, WiFi, NotConnected } public class Reachability { /** :see: O ...

  6. 第1章 游戏之乐——NIM(3)两堆石头的游戏

    NIM(3)两堆石头的游戏 1. 问题描述 假设有两堆石头,有两个玩家会根据如下的规则轮流取石头:每人每次可以从两堆石头中各取出数量相等的石头,或者仅从一堆石头中取出任意数量的石头:最后把剩下的石头一 ...

  7. 高级I/O之异步I/O

    A synchronous I/O operation causes the requesting process to be blocked until that I/O operation com ...

  8. org.apache.hadoop.fs-PositionedReadable

    package org.apache.hadoop.fs; import java.io.*; import org.apache.hadoop.fs.*; /** Stream that permi ...

  9. Number Game poj1143

    Description Christine and Matt are playing an exciting game they just invented: the Number Game. The ...

  10. 使用c3p0连接池

    首先我们需要知道为什么要使用连接池:因为jdbc没有保持连接的能力,一旦超过一定时间没有使用(大约几百毫秒),连接就会被自动释放掉,每次新建连接都需要140毫秒左右的时间而C3P0连接池会池化连接,随 ...