POJ 3694 Network ——(桥 + LCA)
题意:给n个点和m条边,再给出q条边,问每次加一条边以后剩下多少桥。
分析:这题是结合了LCA和dfn的妙用。_dfn数组和dfn的意义不一样,并非访问的时间戳,_dfn表示的是被访问的顺序,而且是多线程访问下的顺序,举个例子,同一个点分岔开来的点,距离这个点相同距离的点,他们的_dfn的值是相同的,而dfn不是,类似于单线程dfs访问的各点的dfn值是不同的。
具体见代码:
#include <stdio.h>
#include <algorithm>
#include <string.h>
#include <map>
#include <vector>
#include <queue>
using namespace std;
const int N = + ; int n,m,tot,head[N],cnt,dfs_clock,dfn[N],_dfn[N],root[N],low[N];
bool bridge[N];
struct edge
{
int nxt,v;
}edges[N<<]; void init()
{
tot = ,dfs_clock = ,cnt = ;
memset(head,-,sizeof(head));
memset(dfn,,sizeof(dfn));
memset(_dfn,,sizeof(_dfn));
memset(bridge,false,sizeof(bridge));
for(int i=;i<=n;i++) root[i] = i;
} void addEdge(int u,int v)
{
edges[tot] = (edge){head[u],v};
head[u] = tot ++;
edges[tot] = (edge){head[v],u};
head[v] = tot ++;
} void tarjan(int u)
{
dfn[u] = low[u] = ++dfs_clock;
_dfn[u] = _dfn[root[u]] + ;
for(int i=head[u];i!=-;i=edges[i].nxt)
{
edge &e = edges[i];
int v = e.v;
if(!dfn[v])
{
root[v] = u;
tarjan(v);
low[u] = min(low[u],low[v]);
if(low[v] > dfn[u])
{
cnt ++;
bridge[v] = true;
}
}
else if(dfn[v] < dfn[u] && v!=root[u]) low[u] = min(low[u],dfn[v]);
}
} void LCA(int u,int v)
{
while(_dfn[u] > _dfn[v])
{
if(bridge[u])
{
cnt --;
bridge[u] = false;
}
u = root[u];
}
while(_dfn[u] < _dfn[v])
{
if(bridge[v])
{
cnt --;
bridge[v] = false;
}
v = root[v];
}
while(u != v)
{
if(bridge[u])
{
cnt --;
bridge[u] = false;
}
if(bridge[v])
{
cnt --;
bridge[v] = false;
}
u = root[u];
v = root[v];
}
} void solve()
{
for(int i=;i<=n;i++) if(!dfn[i]) tarjan(i); int q;scanf("%d",&q);
while(q--)
{
int u,v;scanf("%d%d",&u,&v);
LCA(u,v);
printf("%d\n",cnt);
}
puts("");
} int main()
{
int kase = ;
while(scanf("%d%d",&n,&m)==)
{
if(n== && m==) break;
init();
printf("Case %d:\n",kase++);
while(m--)
{
int u,v;scanf("%d%d",&u,&v);
addEdge(u,v);
}
solve();
}
}
POJ 3694 Network ——(桥 + LCA)的更多相关文章
- POJ 3694 Network (tarjan + LCA)
题目链接:http://poj.org/problem?id=3694 题意是给你一个无向图n个点,m条边,将m条边连接起来之后形成一个图,有Q个询问,问将u和v连接起来后图中还有多少个桥. 首先用t ...
- poj 3694 Network(割边+lca)
题目链接:http://poj.org/problem?id=3694 题意:一个无向图中本来有若干条桥,有Q个操作,每次加一条边(u,v),每次操作后输出桥的数目. 分析:通常的做法是:先求出该无向 ...
- POJ 3694 tarjan 桥+lca
Network Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 7298 Accepted: 2651 Descripti ...
- Poj 3694 Network (连通图缩点+LCA+并查集)
题目链接: Poj 3694 Network 题目描述: 给出一个无向连通图,加入一系列边指定的后,问还剩下多少个桥? 解题思路: 先求出图的双连通分支,然后缩点重新建图,加入一个指定的边后,求出这条 ...
- poj 3417 Network(tarjan lca)
poj 3417 Network(tarjan lca) 先给出一棵无根树,然后下面再给出m条边,把这m条边连上,然后每次你能毁掉两条边,规定一条是树边,一条是新边,问有多少种方案能使树断裂. 我们设 ...
- POJ 3694——Network——————【连通图,LCA求桥】
Network Time Limit:5000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit Stat ...
- POJ 3694 Network (求桥,边双连通分支缩点,lca)
Network Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 5619 Accepted: 1939 Descripti ...
- POJ 3694 Network(无向图求桥+重边处理+LCA)
题目大意: 给你一个无向图,然后再给你一个Q代表有Q次询问,每一次加一条边之后还有几座桥.在这里要对重边进行处理. 每次加入一条边之后,在这条搜索树上两个点的公共祖先都上所有点的桥都没了. 这里重边的 ...
- POJ 3694 Network(并查集缩点 + 朴素的LCA + 无向图求桥)题解
题意:给你一个无向图,有q次操作,每次连接两个点,问你每次操作后有几个桥 思路:我们先用tarjan求出所有的桥,同时我们可以用并查集缩点,fa表示缩点后的编号,还要记录每个节点父节点pre.我们知道 ...
随机推荐
- JS基础_属性名和属性值
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- spring-test跟junit结合单元测试获取ApplicationContext实例的方法
步骤 1.继承AbstractJUnit4SpringContextTests 2.引入ApplicationContext 示例代码:(可以根据name或者类型获取bean) import or ...
- loj 3014「JOI 2019 Final」独特的城市
loj 我本来是直接口胡了一个意思一样的做法的,但是因为觉得有点假+实现要用并查集(?)就卡了好一会儿... 对于一个点\(x\)来说,独特的点一定在它的最长链上,如果有独特的点不在最长链上,那么最长 ...
- 409 Conflict - PUT https://registry.npm.taobao.org/-/user/org.couchdb.user:zphtown - [conflict] User xxx already exists
解决方法cmd执行 npm config set registry https://registry.npmjs.org/ 为什么,参考此文档:https://blog.csdn.net/adc_go ...
- 转:GitHub团队项目合作流程
转自:https://www.cnblogs.com/schaepher/p/4933873.html GitHub团队项目合作流程 已在另一篇博客中写出关于以下问题的解决,点此进入: 同步团队项 ...
- Redis之各版本特性
1.Redis2.6 Redis2.6在2012年正是发布,经历了17个版本,到2.6.17版本,相对于Redis2.4,主要特性如下: 1)服务端支持Lua脚本. 2)去掉虚拟内存相关功能. 3)放 ...
- 帝国cms 加载更多的实现(父栏目以及子栏目都可以实现)
1. <div class="pagelist"> <span id="loadmore" class="btn" sty ...
- http://www.moext.com博客搬家到这里啦
1.原博客莫叉特用的是自己的域名http://www.moext.com,由于服务器在国外,访问不太稳定,SEO做得也很不好: 2.喜欢博客园的极简风格,目前来看广告量也在可接受范围: 3.一个偶然的 ...
- MySQL数据库笔记四:MySQL的约束
<1>概念 是一种限制,它是对表的行和列的数据做出约束,确保表中的数据的完整性和唯一性. <2>使用场景 创建表的时候,添加约束 <3>分类 1. default: ...
- Centos 安装 kubectl kubelet kubeadm
cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://m ...