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往上跳 ...
随机推荐
- sax/dom/jdom/dom4j的区别
sax/dom/jdom/dom4j的区别[转] 博客分类: xml 网上能够查到很多的4种解析方式的区别,我再做一下摘录和总结,顺带给自己做个备份. SAX sax分析器在对xml文档进行分析时 ...
- 慕课网-Java入门第一季-6-8 使用 foreach 操作数组
来源:http://www.imooc.com/code/1864 foreach 并不是 Java 中的关键字,是 for 语句的特殊简化版本,在遍历数组.集合时, foreach 更简单便捷.从英 ...
- Java温故系列之web项目复习
如果从外面导入项目 操作方法为: File->Import -->General-->Existing Project into Workspace 搭建sqlserver数据库连接 ...
- 《疯狂Java讲义》(二)---- Java程序的运行机制和JVM
1. 运行机制 Java源文件(*.java)-----使用javac编译----编译成*.class文件----使用java解释执行----特定平台的机器码 2. 原理 负责解释执行字节码文件的就是 ...
- 百度地图api根据地图缩放等级显示不同的marker点,功能二
功能一里面有marker点后台的代码 根据地图的缩放等级显示不同marker点的坐标JSP代码 <%@ page language="java" contentType=&q ...
- live555+ffmpeg如何提取关键帧(I帧,P帧,B帧)
live555+ffmpeg如何提取关键帧(I帧,P帧,B帧)开发流媒体播放器的时候,特别是在windows mobile,symbian(S60)平台开发时,很可能遇到需要自己开发播放器的情况.S ...
- springmvc 用拦截器+token防止重复提交
一,原理: 1,在进入到提交页面时,使用拦截器拦截在进入此方法前,生成一个token,放到session中, @RequestMapping(value = "/{id}/details&q ...
- AChartEngine 图表绘制
AChartEngine Android 平台的图表开发库, 能绘制 折线图, 饼图, 气泡图, 柱状图, 散点图, 面积图等统计图表. 这些我记录一下,柱状图.折线图和饼状图的小例子.有兴趣的朋友, ...
- iterm2配色
#enables colorin the terminal bash shell export export CLICOLOR= #sets up thecolor scheme for list e ...
- cs端调用Ajax
private static string Descoder() { //ajax地址 string MealFilePath = "http://***/user/SetWebsite.a ...