Source code for submission s761

Go to diff to previous submission

fn.cpp

  1. #include <iostream>
  2. #include <vector>
  3. #include <cstdio>
  4. #include <cmath>
  5. #include <set>
  6. #include <map>
  7. #include <string>
  8.  
  9. using namespace std;
  10.  
  11. vector< vector<int> > G;
  12. bool marked[1000000];
  13. bool ok = false;
  14.  
  15. void dfs(int v, int good)
  16. {
  17. if(G[v].size() >= 4)
  18. ok = true;
  19. else if(G[v].size() == 3)
  20. good++;
  21.  
  22. if(good == 2)
  23. ok = true;
  24.  
  25. if(ok)
  26. return;
  27.  
  28. marked[v] = true;
  29.  
  30. for(int i=0; !ok && i<G[v].size(); i++)
  31. {
  32. int u = G[v][i];
  33. if(marked[u])
  34. continue;
  35. dfs(u,good);
  36. }
  37. }
  38.  
  39. int main()
  40. {
  41. int N, M;
  42. while(scanf("%d %d", &N, &M) == 2)
  43. {
  44. G = vector< vector<int> >(N);
  45. for(int i=0; i<N; i++)
  46. {
  47. G[i] = vector<int>();
  48. marked[i] = false;
  49. }
  50. for(int i=0; i<M; i++)
  51. {
  52. int x, y;
  53. scanf("%d %d", &x, &y);
  54. --x;
  55. --y;
  56. G[x].push_back(y);
  57. G[y].push_back(x);
  58. }
  59. ok = false;
  60. for(int i=0; !ok && i<N; i++)
  61. {
  62. if(!marked[i])
  63. dfs(i,0);
  64. }
  65. if(!ok)
  66. puts("NO");
  67. else
  68. puts("YES");
  69. }
  70.  
  71. return 0;
  72. }
  73.  

Diff to submission s563

fn.cpp

--- c5.s563.cteam036.fn.cpp.0.fn.cpp
+++ c5.s761.cteam036.fn.cpp.0.fn.cpp
@@ -9,17 +9,42 @@
 using namespace std;
 
+vector< vector<int> > G;
+bool marked[1000000];
+bool ok = false;
+
+void dfs(int v, int good)
+{
+        if(G[v].size() >= 4)
+                ok = true;
+        else if(G[v].size() == 3)
+                good++;
+        
+        if(good == 2)
+                ok = true;
+                
+        if(ok)
+                return;
+        
+        marked[v] = true;
+
+        for(int i=0; !ok && i<G[v].size(); i++)
+        {
+                int u = G[v][i];
+                if(marked[u])
+                        continue;
+                dfs(u,good);
+        }
+}
+
 int main()
 {
-        vector< set<int> > G;
-        vector< int > C;
         int N, M;
         while(scanf("%d %d", &N, &M) == 2)
         {
-                G = vector< set<int> >(N);
-                C = vector< int >(N);
+                G = vector< vector<int> >(N);
                 for(int i=0; i<N; i++)
                 {
-                        G[i] = set<int>();
-                        C[i] = 0;
+                        G[i] = vector<int>();
+                        marked[i] = false;
                 }
                 for(int i=0; i<M; i++)
@@ -29,21 +54,17 @@
                         --x;
                         --y;
-                        G[x].insert(y);
-                        G[y].insert(x);
-                        C[x]++;
-                        C[y]++;
+                        G[x].push_back(y);
+                        G[y].push_back(x);
                 }
-                bool ok = false;
-                for(int i=0; i<N; i++)
+                ok = false;
+                for(int i=0; !ok && i<N; i++)
                 {
-                        if(G[i].size() >= 4)
-                        {
-                                puts("YES");
-                                ok = true;
-                                break;
-                        }
+                        if(!marked[i])
+                                dfs(i,0);
                 }
                 if(!ok)
                         puts("NO");
+                else
+                        puts("YES");
         }