zoj 2588 Burning Bridges
题目描述:
Ferry王国是一个漂亮的岛国,一共有N个岛国、M座桥,通过这些桥可以从每个小岛都能
到达任何一个小岛。很不幸的是,最近Ferry王国被Jordan征服了。Jordan决定烧毁所有的桥。
这是个残酷的决定,但是Jordan的谋士建议他不要这样做,因为如果烧毁所有的桥梁,他自己的
军队也不能从一个岛到达另一个岛。因此Jordan决定烧尽可能多的桥,只要能保证他的军队能从
任何一个小岛都能到达每个小岛就可以了。
现在Ferry王国的人民很想知道哪些桥梁将被烧毁。当然,他们无法得知这些信息,因为哪
些桥将被烧毁是Jordan的军事机密。然而,你可以告知Ferry王国的人民哪些桥肯定不会被烧毁。
输入描述:
输入文件中包含多个测试数据。输入文件中第1行为一个整数T,1≤T≤20,表示测试数据
的数目。接下来有T个测试数据,测试数据之间用空行隔开。
每个测试数据的第1行为两个整数N和M,分别表示岛的数目和桥的数目,2≤N≤10000,
1≤M≤100000;接下来有M行,每行为两个不同的整数,为一座桥所连接的小岛的编号。注意,
两个岛之间可能有多座桥。
图论算法理论、实现及应用
- 402 -
输出描述:
对每个测试数据,首先在第1行输出一个整数K,表示K座桥不会被烧毁;第2行输出K个
整数,为这些桥的序号。桥的序号从1开始计起,按输入的顺序进行编号。
两个测试数据的输出之间有一个空行。 // tarjan 求桥的个数
// 这题还要判断重边 #include <iostream>
#include <algorithm>
#include <queue>
#include <math.h>
#include <stdio.h>
#include <string.h>
using namespace std;
#define MOD 1000000007
#define maxn 10010
struct Edge{
int tag;
int to;
int num;
int next;
}E[maxn**];
int V[maxn],num;
int pre[maxn];
int ans[maxn],bridge;
int dfst;
int child;
void init(){
dfst=;
child=;
bridge=;
num=;
memset(V,-,sizeof(V));
memset(pre,,sizeof(pre));
}
void add(int u,int v,int m){
E[num].tag=;
int e;
for(e=V[u];e!=-;e=E[e].next){
if(E[e].to==v)
{
E[e].tag=;
return ;
}
}
E[num].to=v;
E[num].num=m;
E[num].next=V[u];
V[u]=num++;
E[num].to=u;
E[num].num=m;
E[num].next=V[v];
V[v]=num++;
}
int dfs(int u,int fa){
int lowu;
lowu=pre[u]=++dfst;
int v,e;
for(e=V[u];e!=-;e=E[e].next){
v=E[e].to;
if(!pre[v]){
int lowv=dfs(v,u);
lowu=min(lowu,lowv);
if(lowv>pre[u]&&!E[e].tag){
ans[++bridge]=E[e].num;
}
}
else if(v!=fa) lowu=min(lowu,pre[v]);
}
return lowu;
}
int main()
{
int T;
int n,m;
int i,u,v;
scanf("%d",&T);
while(T--){
init();
scanf("%d %d",&n,&m);
for(i=;i<=m;i++){
scanf("%d %d",&u,&v);
add(u,v,i);
}
dfs(,);
sort(ans+,ans+bridge+);
printf("%d\n",bridge);
for(i=,u=bridge;i<=bridge;i++)
{
printf("%d",ans[i]);
if(--u)printf(" ");
}
if(bridge) printf("\n");
if(T)printf("\n");
}
return ;
}
zoj 2588 Burning Bridges的更多相关文章
- ZOJ 2588 Burning Bridges(求桥的数量,邻接表)
题目地址:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2588 Burning Bridges Time Limit: 5 ...
- ZOJ 2588 Burning Bridges(求含重边的无向连通图的割边) - from lanshui_Yang
Burning Bridges Time Limit: 5 Seconds Memory Limit: 32768 KB Ferry Kingdom is a nice little country ...
- 【求无向图的桥,有重边】ZOJ - 2588 Burning Bridges
模板题——求割点与桥 题意,要使一个无向图不连通,输出必定要删掉的边的数量及其编号.求桥的裸题,可拿来练手. 套模板的时候注意本题两节点之间可能有多条边,而模板是不判重边的,所以直接套模板的话,会将重 ...
- 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
Burning Bridges Time Limit: 5 Seconds Memory Limit: 32768 KB Ferry Kingdom is a nice little cou ...
- ZOJ 2588 Burning Bridges(无向连通图求割边)
题目地址:ZOJ 2588 由于数组开小了而TLE了..这题就是一个求无向连通图最小割边.仅仅要推断dfn[u]是否<low[v],由于low指的当前所能回到的祖先的最小标号,增加low[v]大 ...
- ZOJ 2588 Burning Bridges (tarjan求割边)
题目链接 题意 : N个点M条边,允许有重边,让你求出割边的数目以及每条割边的编号(编号是输入顺序从1到M). 思路 :tarjan求割边,对于除重边以为中生成树的边(u,v),若满足dfn[u] & ...
- ZOJ 2588 Burning Bridges 割边(处理重边)
<题目链接> 题目大意: 给定一个无向图,让你尽可能的删边,但是删边之后,仍然需要保证图的连通性,输出那些不能被删除的边. 解题分析: 就是无向图求桥的题目,主要是提高一下处理重边的姿势. ...
- zoj 2588 Burning Bridges(割边/桥)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1588 题意:Ferry王国有n个岛,m座桥,每个岛都可以互达,现在要 ...
随机推荐
- 剑指offer--面试题15--相关
感受:清晰的思路是最重要的!!! 题目:求链表中间节点 ListNode* MidNodeInList(ListNode* pHead) { if(pHead == NULL) return NULL ...
- Linux 操作Mysql详解
一.引言 想使用Linux已经很长时间了,由于没有硬性任务一直也没有系统学习,近日由于工作需要必须使用Linux下的MySQL.本以为有 Windows下使用SQL Server的经验,觉得在Linu ...
- Eclipse改变外观,护眼模式
1.Eclipse改变背景颜色 Windows menu --> Preference General -> Editors -> Text Editors(click), 在右下 ...
- POJ 1781
#include <iostream> #include <string> #include <cmath> using namespace std; unsign ...
- Git stash方法(转)
命令:git stash1.使用git stash保存当前的工作现场,那么就可以切换到其他分支进行工作,或者在当前分支上完成其他紧急的工作,比如修订一个bug测试提交. 2.如果一个使用了一个git ...
- hdu1017
http://acm.hdu.edu.cn/showproblem.php?pid=1017 #include<iostream> #include<stdio.h> #inc ...
- lintcode: 有效的括号序列
题目: 有效的括号序列 给定一个字符串所表示的括号序列,包含以下字符: '(', ')', '{', '}', '[' and']', 判定是否是有效的括号序列. 样例 括号必须依照 "() ...
- 被忽略却很有用的html标签
<base>标签 作用:标签为页面中所有链接指定默认链接地址或链接目标.有时候我们需要让首页的链接全部在新窗口中打开,我们一般会这样写链接,而使用这个标签就能一下搞定了! 属性:Href ...
- 【Linux高频命令专题(15)】more
more命令,功能类似 cat ,cat命令是整个文件的内容从上到下显示在屏幕上. more会以一页一页的显示方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会 ...
- 【mysql的编程专题④】存储过程
类似函数,但是没有返回值,把sql进行封装,便于多次使用或多种应用程序共享使用.不能用在SQL语句中,只能使用CALL调用; 创建存储过程 语法 CREATE PROCEDURE sp_name ([ ...