diff options
author | Leah Neukirchen <leah@vuxu.org> | 2017-12-25 15:34:32 +0100 |
---|---|---|
committer | Leah Neukirchen <leah@vuxu.org> | 2017-12-25 15:34:32 +0100 |
commit | 5c505911c9a0da95ae4bca311abc5902fbbcb1f3 (patch) | |
tree | dcc207b9cf3065861ecb9eefeef0a0b3cb7e495b /day24.cc | |
parent | 8f688120afe73ec3b25d31294b5886f5651bde2e (diff) | |
download | adventofcode2017-5c505911c9a0da95ae4bca311abc5902fbbcb1f3.tar.gz adventofcode2017-5c505911c9a0da95ae4bca311abc5902fbbcb1f3.tar.xz adventofcode2017-5c505911c9a0da95ae4bca311abc5902fbbcb1f3.zip |
day24
Diffstat (limited to 'day24.cc')
-rw-r--r-- | day24.cc | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/day24.cc b/day24.cc new file mode 100644 index 0000000..64e33b0 --- /dev/null +++ b/day24.cc @@ -0,0 +1,51 @@ +#include <algorithm> +#include <iostream> +#include <numeric> +#include <vector> +#include <deque> +#include <utility> + +using namespace std; + + +int +main() +{ + vector<pair<int,int>> d; + + int a, b; + char _; + while (cin >> a >> _ >> b) + d.emplace_back(a, b); + + deque<pair<int,vector<pair<int,int>>>> q{ {0,{}} }; + + int p1 = 0; + int p2 = 0, p2l = 0; + while (!empty(q)) { + auto [s, v] = q.front(); + q.pop_front(); + + int sum = accumulate(begin(v), end(v), 0, + [](int i, auto &g) { return i + g.first + g.second; }); + p1 = max(p1, sum); + if (size(v) > p2l) { + p2 = 0; + p2l = size(v); + } + if (p2l == size(v)) + p2 = max(p2, sum); + + for (auto p : d) + if (p.first == s || p.second == s) { + if (find(begin(v), end(v), p) != end(v)) + continue; + + vector v2 = v; + v2.emplace_back(p); + q.emplace_back(p.first == s ? p.second : p.first, v2); + } + } + + cout << p1 << endl << p2 << endl; // 2006 1994 +} |