zoj2588 Burning Bridges(无向图的桥)
题目大意:给一张无向图,现在要去掉一些边,使图仍然连通,求不能去掉的边。
题目分析:就是求无向图的桥。
tarjan算法跑一遍,和无向图割点十分类似,这里要找low[v] > dfn[u]的边(u,v)便是割边,因为v是u的孩子,但是v无法访问到u的祖先,那么断开这条边原图必不连通,因此这是桥。这题会有平行边,平行边必定不是桥。所以dfs的时候要判断一下。
详情请见代码:
#include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 10005;
const int M = 500005;
int m,n,num,ansnum,dfns;
int head[N],ans[M],low[N],dfn[N];
bool vis[N];
struct node
{
int to,next,id;
}bridge[M<<1];
void build(int s,int e,int id)
{
bridge[num].id = id;
bridge[num].to = e;
bridge[num].next = head[s];
head[s] = num ++;
}
void dfs(int cur,int fa)
{
vis[cur] = true;
int chongbian = 0;
dfn[cur] = low[cur] = dfns ++;
for(int i = head[cur];i != -1;i = bridge[i].next)
{
if(fa == bridge[i].to)
chongbian ++;
if(vis[bridge[i].to] == false)
{
dfs(bridge[i].to,cur);
low[cur] = min(low[cur],low[bridge[i].to]);
if(low[bridge[i].to] > dfn[cur])
ans[ansnum ++] = bridge[i].id;
}
else if(fa != bridge[i].to || chongbian > 1)
low[cur] = min(low[cur],dfn[bridge[i].to]);
}
}
void tarjan()
{
int i;
dfns = 1;
memset(vis,false,sizeof(vis));
memset(dfn,0,sizeof(dfn));
for(i = 1;i <= n;i ++)
if(vis[i] == false)
dfs(i,-1);
printf("%d\n",ansnum);
sort(ans,ans + ansnum);
for(i = 0;i < ansnum;i ++)
printf(i == ansnum - 1?"%d\n":"%d ",ans[i]);
}
int main()
{
int t,i;
int a,b;
scanf("%d",&t);
while(t --)
{
scanf("%d%d",&n,&m);
memset(head,-1,sizeof(head));
num = ansnum = 0;
for(i = 1;i <= m;i ++)
{
scanf("%d%d",&a,&b);
build(a,b,i);
build(b,a,i);
}
tarjan();
if(t)
puts("");
}
return 0;
}
zoj2588 Burning Bridges(无向图的桥)的更多相关文章
- ZOJ2588 Burning Bridges 无向图的割边
题目大意:求无向图的割边编号. 割边定义:在一个连通图中,如果删去一个边e,图便变成不连通的两个部分,则e为该图的割边. 求法:边(u,v) 不是割边,当且仅当边(u,v)在一个环内.因此所有不在环内 ...
- ZOJ2588 Burning Bridges(割边模板)
题目要输出一个无向图的所有割边.用Tarjan算法: 一遍DFS,构造出一颗深度优先生成树,在原无向图中边分成了两种:树边(生成树上的边)和反祖边(非生成树上的边). 顺便求出每个结点的DFS序dfn ...
- HDU4738 Caocao's Bridges 无向图的桥
一眼题:找所有的桥,然后求最小权值 但是有很多坑点 1:如果本来不联通 输出0,(这个坑我知道) 2:但是还有一个坑,就是当整个连通,最小桥的权值是0时,也必须派一个人去,wa了无数遍(还是太年轻) ...
- zoj2588 Burning Bridges --- 寻求尖端
#include <iostream> #include <cstring> #include <string> #include <cstdio> # ...
- zoj 2588 Burning Bridges【双连通分量求桥输出桥的编号】
Burning Bridges Time Limit: 5 Seconds Memory Limit: 32768 KB Ferry Kingdom is a nice little cou ...
- ZOJ 2588 Burning Bridges(求桥的数量,邻接表)
题目地址:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2588 Burning Bridges Time Limit: 5 ...
- HDU 4738--Caocao's Bridges(重边无向图求桥)
Caocao's Bridges Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- ZOJ 2588 Burning Bridges(求含重边的无向连通图的割边) - from lanshui_Yang
Burning Bridges Time Limit: 5 Seconds Memory Limit: 32768 KB Ferry Kingdom is a nice little country ...
- xtu summer individual 5 E - Burning Bridges
Burning Bridges Time Limit: 5000ms Memory Limit: 32768KB This problem will be judged on ZJU. Origina ...
随机推荐
- asp.net MVC4 +MVCpager 无刷新分页
本人菜鸟,最近在用MVC4和MVCpager做无刷新分页时,发现点击下一页时数据不是Ajax提交的,弄了好久终于找到原因,原来还是Jquery引用的问题,现在把代码粘出来,希望能帮到刚接触的程序员,第 ...
- jquery跨域访问解决方案(转)
客户端“跨域访问”一直是一个头疼的问题,好在有jQuery帮忙,从jQuery-1.2以后跨域问题便迎刃而解.由于自己在项目中遇到跨域问题,借此机会对跨域问题来刨根问底,查阅了相关资料和自己的实践,算 ...
- LoadRunner Tutorial
LoadRunner Tutorial Welcome to the LoadRunner tutorial. The tutorial is a self-paced guide that lead ...
- sa命令从/var/account/pacct原始记账数据文件读取信息并汇总
sa命令从/var/account/pacct原始记账数据文件读取信息并汇总
- 利用COM组件IPicture读取jpg、gif、bmp图片文件数据和显示图片
1.读取图片数据 函数原型:bool LoadImage(const char *pName, unsigned char *pBitData); 函数功能,读取pName指向的图片文件的位图数据 b ...
- SonarQube代码质量管理平台工具
1.Sonar轮廓介绍 Sonar (SonarQube)是一个开源平台,用于管理源代码的质量.Sonar 不只是一个质量数据报告工具,更是代码质量管理平台.支持的语言包括:Java.PHP.C#.C ...
- 数据指令MOV
MOV分成三类,第一类不需要拓展(MOV),第二类做符号拓展(MOVS),第三类做零拓展(MOVZ),拓展类型根据源操作数决定. 这三类根据操作的数据类型其后可加l,w,b. MOV操作的操作数可以是 ...
- API经济产业
技术大咖为我们铺好了前进道路,我们为什么还要敬而远之舍近索远呢?充分利用开源,利用API进行App有效整合. 为应用添加日志功能,Loggly; 为应用添加用户管理和身份认证模块,Stormpath; ...
- Binary Tree Level Order Traversal - leetcode - java
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...
- 修改Chrome的User Agent的方法 真实有效
如何修改Chrome的User Agent: 通过网络上查找,修改Chrome的Usre Agent有3种方式,但有的方式是不起作用的. 给Chrome添加启动参数(有作用) 通过扩展-User-Ag ...