bfs染色法判定二分图
#include<iostream> #include<queue> #include<cstring> #include<cstdio> using namespace std; int mapp[2005][2005],color[2005]; int n,m,k; int bfs(int x) { color[x]=1; queue<int> que; que.push(x); while(!que.empty()) { int now=que.front(); que.pop(); for(int i=1;i<=n;i++) { if(mapp[now][i]==1) { if(color[i]==color[now]) { return 0; } else if(color[i]==0) { color[i]=-color[now]; que.push(i); } } } } return 1; } int main() { int T,x,y,k,g=0; cin>>T; while(T--) { cin>>n>>m; memset(mapp,0,sizeof(mapp)); memset(color,0,sizeof(color)); for(int i=1;i<=m;i++) { cin>>x>>y; mapp[x][y]=1; mapp[y][x]=1; } for(int i=1;i<=n;i++) { if(color[i]==0) { k=bfs(i); if(k==0) break; } } if(k==0) { cout<<"No"<<endl; } else { cout<<"Yes"<<endl; } } }