题目链接:点击查看

题目大意:给出一张由n个点组成的无向图,现在要求图中桥的数量

题目分析:tarjan求割边模板题,将边双缩点的模板删删减减就是这个题的模板了,注意有个比较坑的点,题目中的无向边会自己给出,但是我们模板用到的无向边必须挨在一起才行,所以我们得用一个map记录一下,在第一次输入这条边时直接建立一条正向边一条反向边,第二次再输入到这条边的时候直接忽略就行了

最后的答案也不是special judge,所以需要我们按照要求排个序,用vector套pair直接实现就好了

代码:

#include<iostream>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<climits>
#include<cmath>
#include<cctype>
#include<stack>
#include<queue>
#include<list>
#include<vector>
#include<set>
#include<map>
#include<sstream>
using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=1e4+100;const int M=1e5+100;map<pair<int,int>,bool>mp;struct Egde
{int to,next;
}edge1[M];int head1[N],low[N],dfn[N],num,cnt1,n,m;bool bridge[M];void addedge1(int u,int v)
{edge1[cnt1].to=v;edge1[cnt1].next=head1[u];head1[u]=cnt1++;
}void tarjan(int u,int in_edge)
{dfn[u]=low[u]=++num;for(int i=head1[u];i!=-1;i=edge1[i].next){int v=edge1[i].to;if(!dfn[v]){tarjan(v,i);low[u]=min(low[u],low[v]);if(low[v]>dfn[u])bridge[i]=bridge[i^1]=true;}else if(i!=(in_edge^1))low[u]=min(low[u],dfn[v]);}
}void solve()
{for(int i=0;i<n;i++)//找桥 if(!dfn[i])tarjan(i,0);
}bool cmp(pair<int,int>a,pair<int,int>b)
{return a.first<b.first;
}void init()
{mp.clear();cnt1=2;num=0;memset(head1,-1,sizeof(head1));memset(low,0,sizeof(low));memset(dfn,0,sizeof(dfn));memset(bridge,false,sizeof(bridge));
}int main()
{
//  freopen("input.txt","r",stdin);
//  ios::sync_with_stdio(false);while(scanf("%d",&n)!=EOF){init();for(int i=1;i<=n;i++){int u,num;scanf("%d (%d)",&u,&num);while(num--){int v;scanf("%d",&v);if(!mp[make_pair(u,v)]){mp[make_pair(u,v)]=mp[make_pair(v,u)]=true;addedge1(u,v);addedge1(v,u);}}}solve();vector<pair<int,int>>ans;for(int i=2;i<cnt1;i+=2)if(bridge[i])ans.push_back(make_pair(min(edge1[i].to,edge1[i^1].to),max(edge1[i].to,edge1[i^1].to)));sort(ans.begin(),ans.end(),cmp);printf("%d critical links\n",ans.size());for(int i=0;i<ans.size();i++)printf("%d - %d\n",ans[i].first,ans[i].second);printf("\n");}return 0;
}

UVA - 796 Critical Links(tarjan求割边)相关推荐

  1. uva 796 - Critical Links

    传送门:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  2. 模板—tarjan求割边

    int dfn[MAXN],low[MAXN],cnt; void tarjan(int x,int edg) {low[x]=dfn[x]=++cnt;for(int i=f(x);i;i=n(i) ...

  3. tarjan求割点和桥(割边)模板

    tanjan算法相关概念 为了与有向图尽可能保持一致,我们将无向图的一条无向边拆分成两条单向边.两条边互为反向边. 从图中一点作为起点,进行DFS搜索遍历图,这样会得到一棵树,我们称之为DFS搜索树, ...

  4. (连通图 模板题 无向图求桥)Critical Links -- UVA -- 796

    链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  5. 无向图求桥 UVA 796

    题目链接 :http://acm.hust.edu.cn/vjudge/contest/view.action?cid=122091#problem/C 题目: In a computer netwo ...

  6. tarjan求割点和桥(割边)

    tarjan求割点和桥 参考博客:tarjan求割点和桥(割边) 例题:割点 代码(重要的地方在代码中都有注释): #include<bits/stdc++.h> #define ll l ...

  7. 图论 —— 图的连通性 —— Tarjan 求割点与桥

    [概念] 1.割点 1)割点:删除某点后,整个图变为不连通的两个部分的点 2)割点集合:在一个无向图中删除该集合中的所有点,能使原图变成互不相连的连通块的点的集合 3)点连通度:最小割点集合点数 如上 ...

  8. [Codeforces 555E]Case of Computer Network(Tarjan求边-双连通分量+树上差分)

    [Codeforces 555E]Case of Computer Network(Tarjan求边-双连通分量+树上差分) 题面 给出一个无向图,以及q条有向路径.问是否存在一种给边定向的方案,使得 ...

  9. HDU-1269 Tarjan求强连通分量,模板题

    HDU 1269 题意:n个点m条单向边,问任意两个点是否连通. 总结:参考大神博客码的,有些地方还是不太明白. 而且这题还可以双向dfs做,有时间再做一下. // HDU-1269 #include ...

最新文章

  1. 国产光刻机的现状究竟如何?
  2. [HTML/CSS]colum-gap属性
  3. 案例:文件下载需求:1. 页面显示超链接 2. 点击超链接后弹出下载提示框 3. 完成图片文件下载||中文文件问题
  4. 技术向:一文读懂卷积神经网络CNN
  5. 【7】AccessDB快速数据访问
  6. vue-cli 上手
  7. [转]毕业5年决定你的命运 --------值得所有不甘平庸的人看看
  8. 计算机中管理用户数据的单位是,文件_操作系统管理用户数据的单位是______。...
  9. 字符串转换 BSTR/LPSTR/LPWSTR/Char
  10. 基于FPGA实现UART接口设计(异步串行通信)
  11. 随想录(被低估的gccg++)
  12. 转载-如果你不熟悉Material Design,请一口吃下这篇干货!
  13. KMP实现圆周率PI中找字串
  14. Inno自定义界面学习笔记(一)
  15. SQL server 数据迁移到mysql
  16. 15 使用计算机应遵守行业道德规范,信息会考答案~没考的看下!
  17. 在Android Studio上编写第一个安卓程序
  18. android浏览器固定宽度,Android浏览器宽度拉伸到iframe内容宽度,尽管溢出:隐藏...
  19. 什么是DAPP?DAPP和APP相比有什么区别?
  20. Oracle 10g的闪回机制

热门文章

  1. java程序编写九九乘法表_用面向对象的方法编写的九九乘法表java代码的编写
  2. 大型项目中会出现的一些问题:
  3. Dubbo负载均衡算法
  4. 设计模式在Netty中的应用-装饰者模式源码举例
  5. Spring Cloud生态的构建
  6. Nacos配置中心-多配置文件加载
  7. SpringBoot_日志-SpringBoot默认配
  8. SpringBoot_入门-springboot-helloworld
  9. Bootstrap组件_巨幕,页头,缩略图
  10. Java-Calendar