<题目链接>

题目大意:

给定一个无向图,让你尽可能的删边,但是删边之后,仍然需要保证图的连通性,输出那些不能被删除的边。

解题分析:

就是无向图求桥的题目,主要是提高一下处理重边的姿势。

#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define clr(a,b) memset(a,b,sizeof(a))
#define rep(i,s,t) for(int i=s;i<=t;i++)
const int N = 1e4+ , M = 1e5+; struct Edge{ int from,to,id,fp,nxt; }e[M<<]; int n,m,tot,cnt;
int head[N],dfn[N],low[N],cut[M];
vector<int>vec; inline void init(){
cnt=tot=;
vec.clear();
clr(dfn,);clr(head,-);clr(cut,);
}
inline void add(int u,int v,int id){
e[cnt]=(Edge){u,v,id,,head[u]};head[u]=cnt++;
}
inline bool isHash(int u,int v){ //因为添加的是双向边,所以这里直接判断一个方向是否有相同边即可
for(int i=head[u];~i;i=e[i].nxt){
int vv=e[i].to;
if(vv==v){
e[i].fp=;
return false;
}
}return true;
}
void Tarjan(int u,int pre){
dfn[u]=low[u]=++tot;
for(int i=head[u];~i;i=e[i].nxt){
int v=e[i].to;
if(v==pre)continue;
if(!dfn[v]){
Tarjan(v,u);
low[u]=min(low[u],low[v]);
if(low[v]>dfn[u]&&!e[i].fp){
vec.pb(e[i].id); //存下符合条件的割边
}
}else low[u]=min(low[u],dfn[v]);
}
}
inline void Solve(){
printf("%d\n",vec.size());
sort(vec.begin(),vec.end());
for(int i=;i<vec.size();i++){
if(i!=)printf(" ");
printf("%d",vec[i]);
}
if(vec.size())puts("");
}
int main(){
int T;cin>>T;
while(T--){
read(n);read(m);
init();
rep(i,,m){
int u,v;scanf("%d%d",&u,&v);
if(isHash(u,v)){ //判断重边
add(u,v,i);add(v,u,i);
}
}
Tarjan(,-);
Solve();
if(T)puts("");
}
}

ZOJ 2588 Burning Bridges 割边(处理重边)的更多相关文章

  1. zoj 2588 Burning Bridges(割边/桥)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1588 题意:Ferry王国有n个岛,m座桥,每个岛都可以互达,现在要 ...

  2. ZOJ 2588 Burning Bridges(求桥的数量,邻接表)

    题目地址:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2588 Burning Bridges Time Limit: 5 ...

  3. ZOJ 2588 Burning Bridges(求含重边的无向连通图的割边) - from lanshui_Yang

    Burning Bridges Time Limit: 5 Seconds Memory Limit: 32768 KB Ferry Kingdom is a nice little country ...

  4. ZOJ 2588 Burning Bridges(无向连通图求割边)

    题目地址:ZOJ 2588 由于数组开小了而TLE了..这题就是一个求无向连通图最小割边.仅仅要推断dfn[u]是否<low[v],由于low指的当前所能回到的祖先的最小标号,增加low[v]大 ...

  5. 【求无向图的桥,有重边】ZOJ - 2588 Burning Bridges

    模板题——求割点与桥 题意,要使一个无向图不连通,输出必定要删掉的边的数量及其编号.求桥的裸题,可拿来练手. 套模板的时候注意本题两节点之间可能有多条边,而模板是不判重边的,所以直接套模板的话,会将重 ...

  6. zoj 2588 Burning Bridges【双连通分量求桥输出桥的编号】

    Burning Bridges Time Limit: 5 Seconds      Memory Limit: 32768 KB Ferry Kingdom is a nice little cou ...

  7. zoj——2588 Burning Bridges

    Burning Bridges Time Limit: 5 Seconds      Memory Limit: 32768 KB Ferry Kingdom is a nice little cou ...

  8. ZOJ 2588 Burning Bridges (tarjan求割边)

    题目链接 题意 : N个点M条边,允许有重边,让你求出割边的数目以及每条割边的编号(编号是输入顺序从1到M). 思路 :tarjan求割边,对于除重边以为中生成树的边(u,v),若满足dfn[u] & ...

  9. zoj 2588 Burning Bridges

    题目描述:Ferry王国是一个漂亮的岛国,一共有N个岛国.M座桥,通过这些桥可以从每个小岛都能到达任何一个小岛.很不幸的是,最近Ferry王国被Jordan征服了.Jordan决定烧毁所有的桥.这是个 ...

随机推荐

  1. C/C++中的输入输出重定向

    目录 一 C/C++中的输入输出重定向 1.1 C语言输入输出重定向 1.2 C++语言输入输出重定向 参考资料 注:原创不易,转载请务必注明原作者和出处,感谢支持! 一 C/C++中的输入输出重定向 ...

  2. WebApi系列(从.Net FrameWork 到 .Net Core)

    一. 简介  1. 什么是WebApi? WebApi是一个很广泛的概念,在这里我们特指.Net平台下的Asp.Net WebApi框架,它是针对各种客户端(浏览器.APP等)来构建Http服务的一个 ...

  3. WebGL教程

    https://www.w3cschool.cn/webgl/rleo1oh7.html

  4. maven相关配置

    复习了下maven的常用配置及相关解释,直接看的前辈们的博客, maven核心,pom.xml详解(转)

  5. 【nginx】中server配置说明

    server { listen 80; //监听的端口号 server_name localhost; //用域名方式访问的地址 #charset koi8-r; //编码 #access_log / ...

  6. delphi 获取时间戳 如何得到 和 js 中 new Date().getTime();的 相同?

    new Date().getTime();  //1533213439019 通过,启发 function DateTimeToUnix(const AValue: TDateTime): Int64 ...

  7. mysql数据库 表 导入导出

    1.导出表结构 mysqldump --no-data -h192.168.222.11 -uroot -proot --databases db01 db02 db30>file.sql 2. ...

  8. 使用Mermaid画图

    流程图的示例 时序图的示例 甘特图的示例 FAQ 很多时候,你想解释自己的想法/代码,但是用语言来表达会很啰嗦,并且读者也不易理解.一般这种情况下,我们都会想使用图解来解释.但是,我们也不会想下载那些 ...

  9. 微信小程序的桌面图标问题

    提问: 笔者在发布小程序后,发现无法在安卓手机创建桌面图标,而其它的小程序却可以. 回答: 在小程序后台页面(从公众平台进入)完整填写小程序的信息,之后便可创建桌面图标. 这可能是微信的某种筛查机制在 ...

  10. python笔记01-05

    作者:Vamei 出处:http://www.cnblogs.com/vamei https://blog.csdn.net/flyfrommath/article/details/77447587 ...