Go to diff to previous submission
#include <iostream> #include <cctype> #include <cmath> #include <complex> #include <cstdio> #include <string> #include <list> #include <map> #include <queue> #include <set> #include <sstream> #include <stack> #include <utility> #include <vector> using namespace std; #define DEBUG(x) cout << ">>> " #x << " : " << x << endl; map<int,vector<int> > neighbours; map<int,bool> visited; map<int,bool> open; int dsp( int v, int p ) { if( visited[v] ) return 0; if( neighbours[v].size() == 1 && neighbours[v][0] == p ) return 1; visited[v] = true; open[v] = true; int sum = 0; for( size_t i = 0; i < neighbours[v].size(); i++ ) { if( neighbours[v][i] == p ) { continue; } if( open[neighbours[v][i]] ) { sum++; } else { sum += dsp( neighbours[v][i], v ); } } open[v] = false; return sum; } int main() { int n,m; while( scanf("%d %d", &n, &m) == 2 ) { neighbours.clear(); visited.clear(); open.clear(); for( int i = 0; i < m; i++ ) { int u,v; scanf( "%d %d", &u, &v ); neighbours[u].push_back(v); neighbours[v].push_back(u); } bool found = false; for( int i = 0; i < m; i++ ) { if( dsp( i, -1 ) >= 4 ) { found = true; break; } } if( found ) { printf( "YES\n" ); } else { printf( "NO\n" ); } } return 0; }
--- c5.s891.cteam018.fn.cpp.0.fn.cpp +++ c5.s922.cteam018.fn.cpp.0.fn.cpp @@ -23,8 +23,10 @@ int dsp( int v, int p ) { + if( visited[v] ) return 0; if( neighbours[v].size() == 1 && neighbours[v][0] == p ) return 1; - visited[v] = true; + visited[v] = true; open[v] = true; + int sum = 0; for( size_t i = 0; i < neighbours[v].size(); i++ ) { @@ -29,7 +31,11 @@ int sum = 0; for( size_t i = 0; i < neighbours[v].size(); i++ ) { + if( neighbours[v][i] == p ) { + continue; + } + if( open[neighbours[v][i]] ) { sum++; - } else { + } else { sum += dsp( neighbours[v][i], v ); } @@ -57,6 +64,8 @@ bool found = false; for( int i = 0; i < m; i++ ) { - if( visited[i] ) continue; - if( dsp( i, -1 ) >= 4 ) found = true; + if( dsp( i, -1 ) >= 4 ) { + found = true; + break; + } }