ABC的F
  • 板块学术版
  • 楼主Resolute_Faith
  • 当前回复8
  • 已保存回复8
  • 发布时间2022/7/17 21:48
  • 上次更新2023/10/27 19:48:23
查看原帖
ABC的F
754746
Resolute_Faith楼主2022/7/17 21:48

浪费了我好多时间,一直没过

这题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");
}
2022/7/17 21:48
加载中...