POJ3694 Network(连通图+LCA)
题目链接:http://poj.org/problem?id=3694
题目大意:给定一个图,每次添加一条边(可能有重边)。输出每次添加后桥的
数目。由于添加边的次数比较多,添加一次Tarjin一次明显会超时。后来查到了
LCA算法,利用保存的子节点与最近父节点的关系进行计算的。第一次Tarjin后将
桥和其所在的父子节点关系保存下来,之后的m次添加边只需要在LCA中判断添加
的边是否为桥,若为桥则将此桥标记抹去,并将桥数减一,否则无影响。
附AC代码:
#include <stdio.h>
#include <algorithm>
#include <string.h>
using namespace std;
struct ad
{
int to, next, used;
}edge[];
int head[], edge_num, dfn[], low[], bridge_num, Time, father[];
bool isbridge[];
void Add(int x, int y)
{
edge[edge_num].to = y;
edge[edge_num].next = head[x];
edge[edge_num].used = ;
head[x] = edge_num++;
}
void Init()
{
memset(head, -, sizeof(head));
memset(father, , sizeof(father));
memset(low, , sizeof(low));
memset(dfn, , sizeof(dfn));
memset(isbridge, false, sizeof(isbridge));
edge_num = Time = bridge_num = ;
}
void Tarjin(int u, int fa)
{
father[u] = fa;
low[u] = dfn[u] = ++Time;
int i, v;
for(i=head[u]; i!=-; i=edge[i].next)
{
if(edge[i].used==)
{
edge[i].used = edge[i^].used = ;
v = edge[i].to;
if(!dfn[v])
{
Tarjin(v, u);
low[u] = min(low[u], low[v]);
if(low[v]>dfn[u])
{
bridge_num++;
isbridge[v] = true;
}
}
else if(v!=fa)
low[u] = min(low[u], dfn[v]);
}
}
}
void LCA(int u, int v)
{
if(dfn[u]>dfn[v])
swap(u, v);
while(dfn[v]>dfn[u])
{
if(isbridge[v])bridge_num--;
isbridge[v] = false;
v = father[v];
} while(u!=v)
{
if(isbridge[u])bridge_num--;
if(isbridge[v])bridge_num--;
isbridge[u] = isbridge[v] = false;
u = father[u];
v = father[v];
}
}
int main()
{
int n, m, icase = ;
while(scanf("%d %d", &n, &m), n+m)
{
int a, b;
Init();
for(int i=; i<=m; i++)
{
scanf("%d %d", &a, &b);
Add(a, b);
Add(b, a);
}
Tarjin(, -);
int Q;
scanf("%d", &Q);
printf("Case %d:\n", icase++);
while(Q--)
{
scanf("%d %d", &a, &b);
LCA(a, b);
printf("%d\n", bridge_num);
}
}
return ;
}
POJ3694 Network(连通图+LCA)的更多相关文章
- [POJ3694]Network(LCA, 割边, 桥)
题目链接:http://poj.org/problem?id=3694 题意:给一张图,每次加一条边,问割边数量. tarjan先找出所有割边,并且记录每个点的父亲和来自于哪一条边,然后询问的时候从两 ...
- [POJ3694]Network(Tarjan,LCA)
[POJ3694]Network Description A network administrator manages a large network. The network consists o ...
- poj 3417 Network(tarjan lca)
poj 3417 Network(tarjan lca) 先给出一棵无根树,然后下面再给出m条边,把这m条边连上,然后每次你能毁掉两条边,规定一条是树边,一条是新边,问有多少种方案能使树断裂. 我们设 ...
- POJ3694 Network —— 边双联通分量 + 缩点 + LCA + 并查集
题目链接:https://vjudge.net/problem/POJ-3694 A network administrator manages a large network. The networ ...
- Poj 3694 Network (连通图缩点+LCA+并查集)
题目链接: Poj 3694 Network 题目描述: 给出一个无向连通图,加入一系列边指定的后,问还剩下多少个桥? 解题思路: 先求出图的双连通分支,然后缩点重新建图,加入一个指定的边后,求出这条 ...
- POJ3694 Network(Tarjan双联通分图 LCA 桥)
链接:http://poj.org/problem?id=3694 题意:给定一个有向连通图,每次增加一条边,求剩下的桥的数量. 思路: 给定一个无向连通图,添加一条u->v的边,求此边对图剩余 ...
- POJ3694 Network(边双连通分量+缩点+LCA)
题目大概是给一张图,动态加边动态求割边数. 本想着求出边双连通分量后缩点,然后构成的树用树链剖分+线段树去维护路径上的边数和..好像好难写.. 看了别人的解法,这题有更简单的算法: 在任意两点添边,那 ...
- POJ3694 Network【连通分量+LCA】
题意: 一个无向图可以有重边,下面q个操作,每次在两个点间连接一条有向边,每次连接后整个无向图还剩下多少桥(注意是要考虑之前连了的边,每次回答是在上一次的基础之上). 思路: 首先运行一次Tarjan ...
- POJ3694 Network 边双缩点+LCA+并查集
辣鸡错误:把dfs和ldfs搞混...QAQ 题意:给定一个无向图,然后查询q次,求每次查询就在图上增加一条边,求剩余割边的个数. 先把边双缩点,然后预处理出LCA的倍增数组: 然后加边时,从u往上跳 ...
随机推荐
- android windows
获取当前设备的分辨率 DisplayMetrics dm=new DisplayMetrics(); //新建一个分辨对象 WindowManager wm=this.getWindowManager ...
- Fuel快速安装OpenStack
1 介绍 1.1 关于 Mirantis Mirantis,一家很牛逼的openstack服务集成商,他是社区贡献排名前5名中唯一一个靠软件和服务吃饭的公司(其他分别是Red Hat, HP, IBM ...
- SNMP开发c#,高薪诚聘,或者外包开发
现在手里有一个IT资产管理方面的项目,主要会用到SNMP协议,要用这个协议进行开发,对网络上的设备进行控制, 现在高薪诚聘高手,或者项目外包合作,有意向的同学们可以联系我,时间紧迫, QQ:39011 ...
- Dell_R710 centos5.4 网卡(BCM5709)中断故障解决
环境:Dell R710 Centos 5.4 i386 现象:正常运行中无故断网,没有规律 原因:RedHat As5.X 版本中的Broadcom NetXtreme II BCM 5709 ...
- tp中session用来做权限方法 (缓解mysql压力)
http://www.thinkphp.cn/code/2617.html
- leetcode 171
171. Excel Sheet Column Number Related to question Excel Sheet Column Title Given a column title as ...
- C语言PIC18 serial bootloader和C#语言bootloader PC端串口通信程序
了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 新PIC18 Boot ...
- 博客CSS
<p style="background: #CFE0F8; padding: 5px;">理解Code First及其约定和配置</p> <p id ...
- 类似于QQ的简单的聊天代码
先编辑页面 package com.lovo.feichun; import java.awt.Color;import java.awt.Component;import java.awt.Cont ...
- {Reship}{KMP字符串匹配}
关于KMP字符串匹配的介绍和归纳,作者的思路非常清晰,推荐看一下 http://blog.csdn.net/v_july_v/article/details/7041827