拿到题目第一反应是对偶图,然而发现根本不是这样的。
毫无思路的时候,发现数据只有150个。
打了个暴力,没想到AC了。。
而且最后一个点才跑了21ms。数据有点水。。
枚举每一条边,然后炸掉,跑一边图,看看有没有点到不了。
#include<iostream>
#include<cstdio>
#include<string.h>
using namespace std;
int n,m,a,b;
bool map[151][151],visited[151];
void dfs(int x)
{
int i;
visited[x]=true;
for(i=1; i<=n; i++)
if(map[x][i]==true && visited[i]==false)
dfs(i);
return;
}
void read()
{
int i,j,k;
cin>>n>>m;
for(i=1; i<=m; i++)
{
scanf("%d%d",&a,&b);
map[a][b]=true;
map[b][a]=true;//无向图
}
for(i=1; i<=n-1; i++)
for(j=i+1; j<=n; j++)
if(map[i][j]==true)//有边可走
{
map[i][j]=false;
map[j][i]=false;
memset(visited,false,sizeof(visited));//初始化
dfs(1);
for(k=1; k<=n; k++)
if(visited[k]==false)
{
cout<<i<<" "<<j<<endl;
break;
}//判断有没有点到不了
map[i][j]=true;
map[j][i]=true;
}
return;
}
int main()
{
read();
return 0;
}
AC代码。