Go to diff to previous submission
#include <cstdlib> #include <cstdio> #include <cstring> #include <vector> using namespace std; struct Node{ Node(){ visited = false; paw = false; } bool visited; bool paw; vector<int> edges; }; vector<Node> nodes; bool hasZajac(int node,bool tri){ if(nodes[node].visited) return false; nodes[node].visited = true; if(nodes[node].edges.size()==3){ if(tri) { for (int i=0; i<nodes[node].edges.size(); i++) { if (nodes[nodes[node].edges[i]].paw) { return false; } } return true; } for (int i=0; i<nodes[node].edges.size(); i++) { nodes[i].paw = true; } tri = true; } if(nodes[node].edges.size() > 3 ){ return true; } for( int i = 0; i < nodes[node].edges.size(); i++ ){ if(hasZajac(nodes[node].edges[i],tri)) return true; } return false; } int main(int argc, char * argv[]){ int n,m,a,b; while(scanf("%d%d",&n,&m)==2){ nodes.resize(0); nodes.resize(n); for( int i = 0; i < m; i++ ){ scanf("%d%d",&a,&b); a--; b--; nodes[a].edges.push_back(b); nodes[b].edges.push_back(a); } bool zajacfound = false; for( int i = 0; i < nodes.size(); i++ ){ if(!nodes[i].visited){ if(hasZajac(i,false)){ zajacfound = true; break; } } } printf("%s\n",zajacfound?"YES":"NO"); } return 0; }
--- c5.s656.cteam045.fn.cpp.0.furry.cpp +++ c5.s737.cteam045.fn.cpp.0.furry.cpp @@ -9,6 +9,8 @@ Node(){ visited = false; + paw = false; } bool visited; + bool paw; vector<int> edges; }; @@ -21,6 +23,15 @@ nodes[node].visited = true; if(nodes[node].edges.size()==3){ - if(tri) + if(tri) { + for (int i=0; i<nodes[node].edges.size(); i++) { + if (nodes[nodes[node].edges[i]].paw) { + return false; + } + } return true; + } + for (int i=0; i<nodes[node].edges.size(); i++) { + nodes[i].paw = true; + } tri = true; }