#include <bits/stdc++.h>
using namespace std;
typedef array<int, 3> Triple;
int main() {
//freopen("1.in", "r", stdin);
ios_base::sync_with_stdio(0);
cin.tie(0);
Triple ABC;
Triple abc;
for (auto& c : ABC) {
cin >> c;
}
for (auto& c : abc) {
cin >> c;
}
vector<int> result(ABC[2] + 1, -1);
set<Triple> skip;
priority_queue<pair<int, Triple >> pq;
pq.push({0, abc});
skip.insert(abc);
while (!pq.empty()) {
int d;
tie(d, abc) = pq.top();
pq.pop();
d = -d;
for (int x : abc) {
if (result[x] == -1 || result[x] > d) {
result[x] = d;
}
}
for (int s = 0; s < 3; s++) {
for (int t = 0; t < 3; t++) {
if (s == t)
continue;
if (abc[s] == 0 || abc[t] == ABC[t]) // <=> delta == 0
continue;
int delta = min(abc[s], ABC[t] - abc[t]);
Triple abc_ = abc;
abc_[s] -= delta;
abc_[t] += delta;
if (skip.count(abc_) == 0) { // and not in pq?
skip.insert(abc_);
pq.push({-(d + 1), abc_});
}
}
}
}
for (int r : result) {
cout << r << " ";
}
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | #include <bits/stdc++.h> using namespace std; typedef array<int, 3> Triple; int main() { //freopen("1.in", "r", stdin); ios_base::sync_with_stdio(0); cin.tie(0); Triple ABC; Triple abc; for (auto& c : ABC) { cin >> c; } for (auto& c : abc) { cin >> c; } vector<int> result(ABC[2] + 1, -1); set<Triple> skip; priority_queue<pair<int, Triple >> pq; pq.push({0, abc}); skip.insert(abc); while (!pq.empty()) { int d; tie(d, abc) = pq.top(); pq.pop(); d = -d; for (int x : abc) { if (result[x] == -1 || result[x] > d) { result[x] = d; } } for (int s = 0; s < 3; s++) { for (int t = 0; t < 3; t++) { if (s == t) continue; if (abc[s] == 0 || abc[t] == ABC[t]) // <=> delta == 0 continue; int delta = min(abc[s], ABC[t] - abc[t]); Triple abc_ = abc; abc_[s] -= delta; abc_[t] += delta; if (skip.count(abc_) == 0) { // and not in pq? skip.insert(abc_); pq.push({-(d + 1), abc_}); } } } } for (int r : result) { cout << r << " "; } } |
English