P1656 炸铁路
//
// main.cpp
// P1656 炸铁路
//
// Created by CONIO on 2020/12/14.
//
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <queue>
#include <vector>
#include <stack>
using namespace std;
const int N=155,M=5005;
int DFN[N],LOW[N],COL[N],ts,cc,n,m,cur,vis[N];
bool in[N];
stack<int> S;
struct Edge
{
int u,v;
Edge(){}
Edge(int z,int x)
{
if(z>x)swap(z,x);
u=z;
v=x;
}
bool operator <(const Edge &E)const
{
if(this->u==E.u)
{
return this->v<E.v;
}
return this->u<E.u;
}
};
struct Node
{
int v,ind;
Node(int x,int y)
{
v=x;
ind=y;
}
};
vector<Node>G[N];
void dfs(int u)
{
vis[u]=1;
for(int i=0;i<G[u].size();i++)
{
int v=G[u][i].v;
int ind=G[u][i].ind;
if(ind == cur)continue;
if(!vis[v])dfs(v);
}
}
inline int read()
{
char c = getchar(); int x = 0;
for (; !isdigit(c); c = getchar());
for (; isdigit(c); c = getchar())
x = x * 10 + c - '0';
return x;
}
Edge e[M];
bool cmp(Edge &i,Edge &j)
{
if(i.u==j.u)return i.v<j.v;
return i.u<j.u;
}
int main(int argc, const char * argv[]) {
// insert code here...
cin>>n>>m;
for(int i=1;i<=m;i++)
{
int u=read();
int v=read();
G[u].push_back(Node(v,i));
G[v].push_back(Node(u,i));
e[i]=Edge(u,v);
}
vector<Edge> A;
for(int i=1;i<=m;i++)
{
cur=i;
memset(vis, 0, sizeof(vis));
dfs(1);
bool flag=0;
for(int i=1;i<=n;i++)
{
if(!vis[i])
{
flag=1;
}
}
if(flag)
{
A.push_back(e[i]);
}
}
sort(A.begin(),A.end());
for(int i=0;i<A.size();i++)
{
cout<<A[i].u<<' '<<A[i].v<<endl;
}
return 0;
}
本文来自博客园,作者:K1øN,转载请注明原文链接:https://www.cnblogs.com/kion/p/14133166.html