浪费了我好多时间,一直没过
这题bfs不能写吗
//ABC260-F
#include<bits/stdc++.h>
using namespace std;
const int N=6e5+5;
const int inf=15;
int s,t,m,head[N],cnt,dis[N],vis[N];
struct edge{int to,nxt;}a[N];
void add(int x,int y){
a[++cnt].to=y;
a[cnt].nxt=head[x];
head[x]=cnt;
}
bool bfs(int S){
queue<int> q;
for(register int i=1;i<=s+t;i++) dis[i]=inf,vis[i]=0;
dis[S]=0,vis[S]=0,q.push(S);
while(!q.empty()){
int x=q.front();q.pop();
for(register int i=head[x];i;i=a[i].nxt){
int y=a[i].to;
if(y==S) continue;
if(dis[y]==inf){
dis[y]=dis[x]+1;
vis[y]=1;
if(y<=s) q.push(y);
}else{
dis[y]=dis[x]+1;
vis[y]=2;
if(dis[y]<=2) q.push(y);
}
}
}
int cnt=0;
for(register int i=1;i<=s+t;i++){
// printf("%d ",vis[i]);
if(vis[i]>=2){
cnt++;
q.push(i);
if(cnt==3) break;
}
}
if(cnt==3){
while(!q.empty()) printf("%d ",q.front()),q.pop();
printf("%d ",S);
return true;
}
return false;
}
int main(){
scanf("%d %d %d",&s,&t,&m);
for(register int i=1;i<=m;i++){
int x,y;
scanf("%d %d",&x,&y);
add(x,y),add(y,x);
}
for(register int i=s+1;i<=s+t;i++){
if(bfs(i)) return 0;
}
printf("-1");
}