题目链接


思路:跑一边tanjar将所有的割边u->v标记为cut[v]=true,表示u->v这条边为割边。然后记录总的割边数ans,每次从两个询问点暴力往上边在跑直到LCA,如果碰到cut[i]=true,ans就减1,思路很直接,但是好像很容易t,数据太弱了吧。

代码如下:

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<math.h>
#include<set>
#include<stack>
#include<vector>
#include<map>
#include<queue>
#define myself i,l,r
#define lson i<<1
#define rson i<<1|1
#define Lson i<<1,l,mid
#define Rson i<<1|1,mid+1,r
#define half (l+r)/2
#define inff 0x3f3f3f3f
#define lowbit(x) x&(-x)
#define PI 3.14159265358979323846
#define min4(a,b,c,d) min(min(a,b),min(c,d))
#define min3(x,y,z) min(min(x,y),min(y,z))
#define pii make_pair
#define pr pair<int,int>
const int dir[4][2]= {0,-1,-1,0,0,1,1,0};
typedef long long ll;
const ll inFF=9223372036854775807;
typedef unsigned long long ull;
using namespace std;
const int maxn=2e5+5;
int dfn[maxn],low[maxn],d[maxn],Stack[maxn],inStack[maxn],pre[maxn];
int head[maxn],sign;
bool cut[maxn],vis[maxn];
int t,top,num,n,m;
struct node
{int to,p;
}edge[maxn<<1];
void add(int u,int v)
{edge[sign]=node{v,head[u]};head[u]=sign++;
}
void init()
{t=sign=top=num=0;for(int i=1;i<=n;i++){inStack[i]=dfn[i]=0;cut[i]=vis[i]=false;head[i]=-1;pre[i]=i;}
}
void tanjar(int u)///tanjar求割边
{dfn[u]=low[u]=++t;Stack[++top]=t;inStack[u]=1;for(int i=head[u];~i;i=edge[i].p){int v=edge[i].to;if(vis[i/2]) continue;///有重边标记方法vis[i/2]=1;if(!dfn[v]){tanjar(v);pre[v]=u;//父亲d[v]=d[u]+1;//深度low[u]=min(low[u],low[v]);if(low[v]>dfn[u])//求割边{cut[v]=true;//u->v,将v标记,因为跑lca时从下往上跑的num++;}}else if(inStack[u]) low[u]=min(low[u],dfn[v]);}inStack[top--]=0;
}
int lca(int u,int v)///从两点向上跑
{int ans=0;if(d[u]<d[v]) swap(u,v);while(d[u]<d[v]){if(cut[u]) ans++,cut[u]=false;u=pre[u];}while(u!=v){if(cut[u]) cut[u]=false,ans++;//碰到割边ans++if(cut[v]) cut[v]=false,ans++;u=pre[u],v=pre[v];}return ans;
}
int main()
{int x,y,q,cas=0;while(cin>>n>>m,n+m){init();for(int i=1;i<=m;i++)scanf("%d %d",&x,&y),add(x,y),add(y,x);d[1]=0,tanjar(1);scanf("%d",&q);printf("Case %d:\n",++cas);while(q--){scanf("%d %d",&x,&y);num-=lca(x,y);printf("%d\n",num);}}return 0;
}

POJ - 3694 Network tanjar割边+lca相关推荐

  1. 【割边缩点】解题报告:POJ - 3694 - Network(Tarjan割边缩点 + LCA + 并查集优化)

    POJ - 3694 - Network 给定一张N个点M条边的无向连通图,然后执行Q次操作,每次向图中添加一条边,并且询问当前无向图中"桥"的数量.N≤105,M≤2∗105,Q ...

  2. POJ 3694 Network(tarjan+lca+并查集)

    题目 给定一张NNN个点MMM条边的无向连通图,然后执行QQQ次操作,每次向图中添加一条边,并且询问当前无向图中"桥"的数量. 题解 先求出图中所有的边双,然后缩点 令c[x],c ...

  3. POJ 3694 Network ★(边双连通分量+并查集缩点+LCA)

    [题意]一个无向图可以有重边,下面q个操作,每次在两个点间连接一条有向边,每次连接后整个无向图还剩下多少桥(每次回答是在上一次连边的基础之上) [分析]好题,做完后涨了很多姿势~ 普通做法当然就是每加 ...

  4. POJ - 3694 Network(边双缩点+LCA+并查集优化)

    题目链接:点击查看 题目大意:给出一个由n个点组成的无向图,现在有m次操作,每次操作都会向图中增加一条无向边,每次操作后询问当前图中有多少个桥 题目分析:题意很好理解,思路也很好想,就是代码量有点小多 ...

  5. POJ 3694 Network

    大意:让你求无向图的桥(割边) 思路:一次查询,重建一次图,然后求一次割边,TLE.去网上开了看资料,可以用LCA暴力查询,唔,改天看看LCA. TLE CODE: #include <iost ...

  6. POJ 3694 (tarjan缩点+LCA+并查集)

    好久没写过这么长的代码了,题解东哥讲了那么多,并查集优化还是很厉害的,赶快做做前几天碰到的相似的题. 1 #include <iostream> 2 #include <algori ...

  7. POJ 1236 Network of Schools(强连通 Tarjan+缩点)

    POJ 1236 Network of Schools(强连通 Tarjan+缩点) ACM 题目地址:POJ 1236 题意:  给定一张有向图,问最少选择几个点能遍历全图,以及最少加入�几条边使得 ...

  8. 【POJ - 3694】Network(对dfn求lca 或 缩点+lca 或 边双连通+并查集)

    题干: 网络管理员管理大型网络.该网络由N台计算机和成对计算机之间的M链路组成.任何一对计算机都通过连续的链接直接或间接连接,因此可以在任何两台计算机之间转换数据.管理员发现某些链接对网络至关重要,因 ...

  9. POJ - 3417 Network LCA+树上差分

    思路:首先来说,给一个树加一条边肯定要构成一个环,我们假设加了该边后产生的环上的每一条边都累计加一. 假设这条边是a到b,那么其实就是原树a->lca(a,b)到b->lca(a,b)上的 ...

最新文章

  1. 数学建模中的matlab实例,matlab数学建模实例
  2. bt服务器搭建 linux_Linux 搭建 我的世界(MC) 基岩版服务器
  3. 这些基础协议,你懂吗?
  4. 【Python】精选23个Pandas常用函数
  5. 一切都是关于“ –ilities”的
  6. 邻结矩阵的建立和 BFS,DFS;;
  7. openwrt是嵌入式linux,非常方便的OpenWrt的嵌入式Linux开发环境
  8. linux生成固定大小的文件夹的实现
  9. Page Object设计模式实践
  10. Jmeter(一)http接口添加header和cookie
  11. TinyWeb:C#中的简单Web服务器
  12. /etc/rc.local开启自启不执行问题
  13. rsyslog,journalctl
  14. 2020中兴捧月算法大赛参赛总结
  15. 如何把微信朋友圈的小视频转发到自己的朋友圈
  16. linux系统dc模拟器,wine(linux模拟器)
  17. Metasploit Framework(3)Meterpreter
  18. 第九话 树结构实际应用
  19. H5页面调用手机打电话功能
  20. 计算机开机过程英语怎么说,电脑开机显示一段英文,求解大神

热门文章

  1. 黑马程序员 交通灯案例
  2. 解决sql2014的distribution系统库distribution.mdf过大问题
  3. 中国互联网+光伏发电行业商业模式创新与投资机会深度研究报告
  4. MyBatis 切换不同的类型数据库方案
  5. 《结对-贪吃蛇游戏-最终程序》
  6. 【云安全与同态加密_调研分析(3)】国内云安全组织及标准——By Me
  7. Struts2 验证规则配置文件
  8. Deep Learning 学习随记(三)续 Softmax regression练习
  9. 微软SCRUM 1.0流程模板在中文版TFS2010上无法创建项目的解决办法(续)
  10. 使用存储过程更新数据库!成功了但是返回值为 -1 的变态问题的解决办法!