From: Skullheadx <94652084+Skullheadx@users.noreply.github.com> Date: Sat, 19 Nov 2022 21:30:30 +0000 (-0500) Subject: 2016 S3 wip X-Git-Url: http://git.skullheadx.com/nixos/static/about.html?a=commitdiff_plain;h=3cf021f1047e9fc3cf7a551b42e717b7de959b22;p=CCC.git 2016 S3 wip --- diff --git a/Main/C++/2016/S3.cpp b/Main/C++/2016/S3.cpp index 86dcf61..eb48f75 100644 --- a/Main/C++/2016/S3.cpp +++ b/Main/C++/2016/S3.cpp @@ -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> tree; int a,b; @@ -49,43 +44,53 @@ int main() for (int i = 0; i < M; i++) { vector tseen; - vector c{pho_restaurants[i]}; + vector c{pho_restaurants[i],0}; vector> temp{c,tseen}; q.push(temp); } - vector current, seen; - vector> temp; - int last_element; + vector>> seen; + vector pho_seen,temp3; + vector> 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 c(current.begin(), current.end()); - c.push_back(tree[last_element][r]); - vector> next_value{c,seen}; + cout << length; + return 0; + } + + for (int r = 0; r < tree[current].size();r++) + { + vector c{tree[current][r], length + 1}; + vector> 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 index 0000000..1a874e2 --- /dev/null +++ b/Main/C++/test.cpp @@ -0,0 +1,24 @@ +#include +using namespace std; + +void print_v(vector v) +{ + for (int i = 0; i < v.size(); i++) + { + cout << v[i] << " "; + } + cout << endl; +} + +int main() +{ + vector v{1,2,3}; + vector v2 = v; + print_v(v); + print_v(v2); + v2[1] = 4; + print_v(v); + print_v(v2); + + return 0; +} diff --git a/Main/Python/2016/S3.py b/Main/Python/2016/S3.py index 2bb656a..eeea985 100644 --- a/Main/Python/2016/S3.py +++ b/Main/Python/2016/S3.py @@ -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()))