DFS
#include <bits/stdc++.h>
using namespace std;
const int N = 222 ;
const int INF = 0x3f3f3f3f ;
typedef long long ll;
struct node{
int to, nex;
} e[ N * N * 2 ] ;
int head[ N] , cnt, ans, link[ N] , vis[ N] ;
void add ( int u, int v)
{
e[ cnt] . to = v;
e[ cnt] . nex = head[ u] ;
head[ u] = cnt++ ;
}
bool dfs ( int u, int flag)
{
vis[ u] = flag;
for ( int i = head[ u] ; i != - 1 ; i = e[ i] . nex) {
int v = e[ i] . to;
if ( vis[ v] == vis[ u] ) return false ;
if ( ! vis[ v] && ! dfs ( v, 3 - flag) ) return false ;
}
return true ;
}
int main ( )
{
int n, m;
while ( scanf ( "%d %d" , & n, & m) == 2 ) {
memset ( head, - 1 , sizeof ( head) ) ;
cnt = 0 ;
for ( int i = 0 ; i < m; i++ ) {
int u, v;
scanf ( "%d %d" , & u, & v) ;
add ( u, v) ;
add ( v, u) ;
}
memset ( vis, 0 , sizeof ( vis) ) ;
if ( dfs ( 1 , 1 ) ) cout << "Yes" << endl;
else cout << "No" << endl;
}
return 0 ;
}
BFS
#include <bits/stdc++.h>
using namespace std;
const int N = 222 ;
const int INF = 0x3f3f3f3f ;
typedef long long ll;
struct node{
int to, nex;
} e[ N * N * 2 ] ;
int head[ N] , cnt, ans, link[ N] , vis[ N] ;
void add ( int u, int v)
{
e[ cnt] . to = v;
e[ cnt] . nex = head[ u] ;
head[ u] = cnt++ ;
}
bool bfs ( )
{
queue< int > q;
q. push ( 1 ) ;
vis[ 1 ] = 1 ;
while ( ! q. empty ( ) ) {
int u = q. front ( ) ;
q. pop ( ) ;
for ( int i = head[ u] ; i != - 1 ; i = e[ i] . nex) {
int v = e[ i] . to;
if ( ! vis[ v] ) {
vis[ v] = 3 - vis[ u] ;
q. push ( v) ;
}
else if ( vis[ v] == vis[ u] ) return false ;
}
}
return true ;
}
int main ( )
{
int n, m;
while ( scanf ( "%d %d" , & n, & m) == 2 ) {
memset ( head, - 1 , sizeof ( head) ) ;
cnt = 0 ;
for ( int i = 0 ; i < m; i++ ) {
int u, v;
scanf ( "%d %d" , & u, & v) ;
add ( u, v) ;
add ( v, u) ;
}
memset ( vis, 0 , sizeof ( vis) ) ;
if ( bfs ( ) ) cout << "Yes" << endl;
else cout << "No" << endl;
}
return 0 ;
}