zoj 2588 Burning Bridges 边联通性
最基本的找桥,要注意0的情况,不用输出空行,zoj现在真慢
/*
author:jxy
lang:C/C++
university:China,Xidian University
**If you need to reprint,please indicate the source**
*/
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;
#define Maxm 200005
#define Maxn 10005
int first[Maxm];
int U[Maxm];
int num[Maxm];
int next[Maxm];
int vis[Maxn],low[Maxn],dph[Maxn];
vector<int> ans;
int cnt;
void add(int v,int u)
{
cnt++;
for(int i=first[v];~i;i=next[i])
if(U[i]==u)//重边处理
{
num[i]++;
return;
}
next[cnt]=first[v];
first[v]=cnt;
U[cnt]=u;
num[cnt]=1;
}
int dfs(int v,int f,int d)
{
vis[v]=1;
low[v]=dph[v]=d;
for(int i=first[v];~i;i=next[i])
{
int &u=U[i];
if(vis[u])
{
if(u!=f)low[v]=min(low[v],dph[u]);
}
else
{
dfs(u,v,d+1);
if(low[u]>dph[v]&&num[i]==1)//num[i]>1为有重边
ans.push_back(i|1);
low[v]=min(low[u],low[v]);
}
}
}
int main()
{
int T;
int n,m;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
int i;
int a,b;
memset(vis,0,sizeof(vis));
memset(first,-1,sizeof(first));
cnt=-1;
for(i=0;i<m;i++)
{
scanf("%d%d",&a,&b);
add(a,b);add(b,a);
}
ans.clear();
dfs(1,-1,0);
sort(ans.begin(),ans.end());
printf("%d\n",ans.size());
if(ans.size())printf("%d",(ans[0]+1)/2);
for(i=1;i<ans.size();i++)
printf(" %d",(ans[i]+1)/2);
if(ans.size())puts("");
if(T)puts("");
}
}
最后更新:2017-04-03 16:49:02
上一篇:
好电影推荐
下一篇:
知识共享图文直播---(一)将数据库中的数据加载到MSFlexGrid控件中再导入Excel
oracle中报ora-01033:oracle initializationg or shutdown in progress错
CCAI 2017 | 专访德国语言技术领军者 Hans Uszkoreit:深度学习还不足以解决 NLP 核心问题
Spring-Bean的属性(1.单独定义BEAN,ID为之的BEAN参考之 2.在BEAN中直接定义参考的BEAN)
Cloud Card能否干掉App
Gartner:中国日益盛行的即时通讯让传统应用市场陷入困境
神经网络常用激活函数对比:sigmoid VS sofmax(附python源码)
Ruby中实现stream
域名备案与否对网站seo的影响分析
线程池的使用(第八章)
asp.net 自定义错误页