看别人都用并查集。。我用的是bfs
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <vector>
#include <map>
#include <queue>
#include <ctime>
#include <set>
#define ll long long
#define MK make_pair
#define PB push_back
#define SZ(x) ((int)(x).size())
#define FOR(it,c) for ( __typeof((c).begin()) it=(c).begin(); it!=(c).end(); it++ )
using namespace std;
int n,m,st[2013];
vector<int> vec[2013];
bool bfs(int i){
queue<int> q;
q.push(i);
while(!q.empty()){
int u=q.front();q.pop();
FOR(v,vec[u])
if(!st[*v]){
q.push(*v);
st[*v]=-st[u];
}
else if(st[*v]==st[u]) return false;
}
return true;
}
int main(){
#ifndef ONLINE_JUDGE
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
#endif
int t,ca=0;
cin>>t;
while(t--){
cout<<"Scenario #"<<++ca<<':'<<endl;
memset(st,0,sizeof(st));
cin>>n>>m;
for(int i=0;i<m;i++){
int a,b;scanf("%d%d",&a,&b);
vec[a].PB(b);
vec[b].PB(a);
}
bool ok=true;
for(int i=1;i<=n&&ok;i++)
if(!st[i]){
st[i]=1;
if(!bfs(i)) ok=false;
}
if(ok) puts("No suspicious bugs found!");
else puts("Suspicious bugs found!");
puts("");
for(int i=1;i<=n;i++) vec[i].clear();
}
return 0;
}

本文介绍了一种使用广度优先搜索(BFS)算法来判断一个图是否为二分图的方法,并通过一个具体的编程实现案例进行说明。该方法适用于竞赛编程及图论问题解决。
552

被折叠的 条评论
为什么被折叠?



