]> Skullheadx's Git Forge - CCC.git/commitdiff
2016 S3 wip
authorSkullheadx <94652084+Skullheadx@users.noreply.github.com>
Sat, 19 Nov 2022 21:30:30 +0000 (16:30 -0500)
committerSkullheadx <94652084+Skullheadx@users.noreply.github.com>
Sat, 19 Nov 2022 21:30:30 +0000 (16:30 -0500)
Main/C++/2016/S3.cpp
Main/C++/test.cpp [new file with mode: 0644]
Main/Python/2016/S3.py

index 86dcf6160882727ce7dcd7ce6ba3a84cc5b31b83..eb48f75371f4129845293d750ea4f5e62fb7b593 100644 (file)
@@ -13,11 +13,6 @@ int main()
         cin >> t;
         pho_restaurants.push_back(t);
     }
-//    for (int i = 0; i < M; i++)
-//    {
-//        cout << pho_restaurants[i] << " ";
-//    }
-//    cout << endl;
 
     map<int,vector<int>> tree;
     int a,b;
@@ -49,43 +44,53 @@ int main()
     for (int i = 0; i < M; i++)
     {
         vector<int> tseen;
-        vector<int> c{pho_restaurants[i]};
+        vector<int> c{pho_restaurants[i],0};
         vector<vector<int>> temp{c,tseen};
         q.push(temp);
     }
-    vector<int> current, seen;
-    vector<vector<int>> temp;
-    int last_element;
+    vector<vector<vector<int>>> seen;
+    vector<int> pho_seen,temp3;
+    vector<vector<int>> temp, temp2;
+    int current, length;
     while (!q.empty())
     {
         temp = q.front();
-        current = temp[0];
-        last_element = current[current.size()-1];
-        seen = temp[1];
+
+        current = temp[0][0];
+        length = temp[0][1];
+        pho_seen = temp[1];
         q.pop();
-        if (find(pho_restaurants.begin(),pho_restaurants.end(),last_element)!= pho_restaurants.end() && find(seen.begin(),seen.end(),last_element)== seen.end())
+        temp3.clear();
+        temp3.push_back(current);
+        temp2.clear();
+        temp2.push_back(temp3);
+        temp2.push_back(pho_seen);
+        if (find(seen.begin(),seen.end(),temp2) != seen.end())
         {
-            seen.push_back(last_element);
+            continue;
         }
-//        for (int i = 0; i < current.size(); i++)
-//        {
-//            cout << current[i] << " ";
-//        }
-//        cout << endl;
-        if (seen.size() == pho_restaurants.size())
+        else
         {
-            cout << current.size() - 1;
-            break;
+            seen.push_back(temp2);
         }
 
-        for (int r = 0; r < tree[last_element].size();r++)
+
+        if (find(pho_restaurants.begin(),pho_restaurants.end(),current)!= pho_restaurants.end() && find(pho_seen.begin(),pho_seen.end(),current)== pho_seen.end())
+        {
+            pho_seen.push_back(current);
+        }
+        if (pho_seen.size() == pho_restaurants.size())
         {
-            vector<int> c(current.begin(), current.end());
-            c.push_back(tree[last_element][r]);
-            vector<vector<int>> next_value{c,seen};
+            cout << length;
+            return 0;
+        }
+
+        for (int r = 0; r < tree[current].size();r++)
+        {
+            vector<int> c{tree[current][r], length + 1};
+            vector<vector<int>> next_value{c,pho_seen};
             q.push(next_value);
         }
     }
-
     return 0;
 }
diff --git a/Main/C++/test.cpp b/Main/C++/test.cpp
new file mode 100644 (file)
index 0000000..1a874e2
--- /dev/null
@@ -0,0 +1,24 @@
+#include <bits/stdc++.h>
+using namespace std;
+
+void print_v(vector<int> v)
+{
+    for (int i = 0; i < v.size(); i++)
+    {
+        cout << v[i] << " ";
+    }
+    cout << endl;
+}
+
+int main()
+{
+    vector<int> v{1,2,3};
+    vector<int> v2 = v;
+    print_v(v);
+    print_v(v2);
+    v2[1] = 4;
+    print_v(v);
+    print_v(v2);
+
+    return 0;
+}
index 2bb656a74a7191c5197876cdb0ceb93c5a817570..eeea9859eef71590e710540cebc9fec80d4a5e16 100644 (file)
@@ -2,7 +2,6 @@ from queue import Queue
 N, M = tuple(map(int,input().split()))
 pho_restaurants = tuple(map(int,input().split()))
 
-
 tree = dict()
 for i in range(N-1):
     a,b = tuple(map(int,input().split()))
@@ -17,22 +16,19 @@ for i in range(N-1):
 
 q = Queue()
 for i in pho_restaurants:
-    q.put(([i],set()))
-
+    q.put((i,0, set()))
+seen = set()
 while not q.empty():
-    current, seen = q.get()
-
-    if current[-1] in pho_restaurants:
-        seen.add(current[-1])
-    # print(current, seen, len(pho_restaurants))
-    # if len(current) == 23:
-    #     quit()
-    print(len(current))
-    if len(seen) == len(pho_restaurants):
-        print(len(current)-1)
+    current, length, pho_seen = q.get()
+    if (current, tuple(pho_seen)) in seen:
+        continue
+    else:
+        seen.add((current,tuple(pho_seen)))
+    if current in pho_restaurants:
+        pho_seen.add(current)
+    if len(pho_seen) == len(pho_restaurants):
+        print(length)
         break
 
-    for r in tree[current[-1]]:
-        c = current[:]
-        c.append(r)
-        q.put((c,seen.copy()))
+    for r in tree[current]:
+        q.put((r, length + 1, pho_seen.copy()))