原题链接:点击打开链接
lz不会
code:
#include <iostream>
#include <string>
#include <stdio.h>
#include <cstdlib>
#include <queue>
#include<string.h>
#include<vector>
#include<algorithm>
using namespace std;
vector<int >vec[110000];
int vis[110000],link[110000];
int n, m,node;
int cnt;
queue<int >q;
int bfs()//判断是否为二分图
{
memset(vis,-1,sizeof(vis));
vis[node]=1;
while(!q.empty())
{
int k=q.front();
q.pop();
for(int j=0;j<vec[k].size();j++)
{
int tem=vec[k][j];
if(vis[tem]==vis[k])
return 1;
if(vis[tem]==-1)
{
q.push(tem);
vis[tem]=1-vis[k];//1 || 0;
}
}
}
return 0;
}
int main()
{
// freopen("i.txt","r",stdin);
int i,t,j,a,b,tt=0;
scanf("%d",&t);
while(t--)
{
tt++;
scanf("%d%d%d", &n, &m,&node);
for(i=0;i<=n;i++)
vec[i].clear();
while(m--)
{
scanf("%d%d",&a,&b);
vec[a].push_back(b);
vec[b].push_back(a);
}
while(!q.empty())
q.pop();
q.push(node);
// cout<<"*****"<<endl;
if(!bfs())
printf("Case %d: NO\n",tt);
else
printf("Case %d: YES\n",tt);
}
return 0;
}