poj3694(双联通分量+LCA)
题意:一个无向图可以有重边,下面q个操作,每次在两个点间连接一条有向边,每次连接后整个无向图还剩下多少桥!
不知道为什么写这道题总是超时!改了一次一次的,还是超时的!
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<vector>
#include<stack>
#include<cstdio>
using namespace std;
const int maxx=200006;
struct node{int v;int next;
}e[maxx];
int cnt;
int head[maxx];
void add(int u,int v){e[cnt].v=v;e[cnt].next=head[u];head[u]=cnt++;
}
int dfn[maxx],low[maxx],vis[maxx],pre[maxx];
int Dfn[maxx],flag[maxx];
int n,m;
int index;
int root;
int ans;
int q;
void init(){root=1;index=1;ans=0;cnt=0;memset(Dfn,0,sizeof(Dfn));memset(flag,0,sizeof(flag));memset(pre,0,sizeof(pre));memset(dfn,0,sizeof(dfn));memset(low,0,sizeof(low));memset(vis,0,sizeof(vis));memset(head,-1,sizeof(head));for(int i=1;i<=n;i++){pre[i]=i;}
}
void dfs(int u,int fa){index++;low[u]=dfn[u]=index;Dfn[u]=Dfn[pre[u]]+1;for(int i=head[u];i!=-1;i=e[i].next){int v=e[i].v;if(dfn[v]==0){pre[v]=u;dfs(v,u);low[u]=min(low[u],low[v]);if(low[v]>dfn[u]){ans++;vis[v]=1;}}else if(v!=pre[u]){low[u]=min(low[u],dfn[v]);}}
}
void lca(int u,int v){while(Dfn[u]>Dfn[v]){if(vis[u]==1)ans--;vis[u]=0;u=pre[u];}while(Dfn[u]<Dfn[v]){if(vis[v]==1)ans--;vis[v]=0;v=pre[v];}while(u!=v){if(vis[u])ans--;if(vis[v])ans--;vis[u]=vis[v]=0;u=pre[u];v=pre[v];}
}
int main(){int count=1;while(scanf("%d %d",&n,&m)!=EOF){if(n==0&&m==0)break;init();for(int i=1;i<=m;i++){int a,b;scanf("%d %d",&a,&b);add(a,b);add(b,a);}dfs(1,root);cout<<"Case "<<count++<<":"<<endl;scanf("%d",&q);for(int i=1;i<=q;i++){int a,b;scanf("%d %d",&a,&b);lca(a,b);cout<<ans<<endl;}cout<<endl;}return 0;
}
poj3694(双联通分量+LCA)相关推荐
- POJ 3694Network(Tarjan边双联通分量 + 缩点 + LCA并查集维护)
[题意]: 有N个结点M条边的图,有Q次操作,每次操作在点x, y之间加一条边,加完E(x, y)后还有几个桥(割边),每次操作会累积,影响下一次操作. [思路]: 先用Tarjan求出一开始总的桥的 ...
- 『Tarjan算法 无向图的双联通分量』
无向图的双连通分量 定义:若一张无向连通图不存在割点,则称它为"点双连通图".若一张无向连通图不存在割边,则称它为"边双连通图". 无向图图的极大点双连通子图被 ...
- 【BZOJ2959】【codevs2002】长跑,维护双联通分量
传送门1 传送门2 思路: 思路巧妙的一道数据结构 题意就是让你维护双联通分量 我一开始的想法是写两个并查集来分别维护连通性和双联通分量里的点,然后通过LCT来维护权值和,但我发现缩点时不是很好搞,而 ...
- 【9.22校内测试】【可持久化并查集(主席树实现)】【DP】【点双联通分量/割点】...
1 build 1.1 Description 从前有一个王国,里面有n 座城市,一开始两两不连通.现在国王将进行m 次命令,命令可 能有两种,一种是在u 和v 之间修建道路,另一种是询问在第u 次命 ...
- lightoj 1300 边双联通分量+交叉染色求奇圈
题目链接:http://lightoj.com/volume_showproblem.php?problem=1300 边双连通分量首先dfs找出桥并标记,然后dfs交叉着色找奇圈上的点.这题只要求在 ...
- POJ-3352-RoadConstruction(边双联通分量,缩点)
链接:https://vjudge.net/problem/POJ-3352#author=0 题意: 给一个无向连通图,至少添加几条边使得去掉图中任意一条边不改变图的连通性(即使得它变为边双连通图) ...
- 10.31T2 点双联通分量+预处理前缀+二分答案
2.逛公园I (parka) [问题描述] 琥珀色黄昏像糖在很美的远方,思念跟影子在傍晚一起被拉长-- 小 B 带着 GF 去逛公园,公园一共有 n 个景点,标号为 1 . . . n. ...
- HDU4612 Warm up —— 边双联通分量 + 重边 + 缩点 + 树上最长路
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=4612 Warm up Time Limit: 10000/5000 MS (Java/Ot ...
- poj2942(双联通分量,交叉染色判二分图)
题意:一些骑士,他们有些人之间有矛盾,现在要求选出一些骑士围成一圈,圈要满足如下条件:1.人数大于1.2.总人数为奇数.3.有仇恨的骑士不能挨着坐.问有几个骑士不能和任何人形成任何的圆圈. 思路:首先 ...
最新文章
- ORB_SLAM2概述
- golang 系统调用 syscall 简介
- 计算机网络(三)——TCP/IP协议
- 话说关于 ZooKeeper 方面,面试有什么可问的啊?​
- 你了解MySQL 主从复制吗?
- Vista下将Area效果应用到整个窗体
- 随笔之生成简单的验证码
- android 串口CH341驱动,ch341ser驱动安装程序
- css的语法结构由3部分组成,CSS语法
- 软件是如何做到控制芯片电路的闭合的?
- 克罗内克张量积 Kron 的 OpenCV C++实现
- VBA 获取某列最后非空单元格的行数
- PXE安装windows系统,pxe-e55:ProxyDhcp service did not reply to request on port 4011
- 百度图片爬虫【图片编码处理】
- python找房源_python抓取链家房源信息(三)
- 《纽约客》特写Jeff Dean与Sanjay:谷歌唯二11级工程师,同一台电脑上写代码
- uniapp实现倒计时
- 计算机专业英语 论文的框架结构,大学英语议专业论文写作万能15句框架结构模版.pdf...
- 黑盒测试的原理及内容
- laravel框架偶尔会出现SQLSTATE[HY000] [1045] Access denied for user ‘forge‘@‘localhost‘报错,怎么解决