QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#627514 | #9230. Routing K-Codes | ucup-team1264 | WA | 153ms | 28672kb | C++20 | 3.9kb | 2024-10-10 16:11:36 | 2024-10-10 16:11:37 |
Judging History
answer
// https://www.youtube.com/watch?v=CrymicX875M
// Angel of mercy
// How did you move me
// Why am I on my feet again
#ifndef ONLINE_JUDGE
#include "templates/debug.hpp"
#else
#define debug(...)
#endif
#include <bits/stdc++.h>
using namespace std;
using i64 = int64_t;
using u64 = uint64_t;
// #define int i64
void solve() {
int n, m; cin >> n >> m;
vector<vector<int>> adj(n);
for (int e = 0; e < m; e++) {
int u, v; cin >> u >> v;
u--, v--;
adj[u].push_back(v);
adj[v].push_back(u);
}
if (m != n - 1) {
cout << "NIE\n";
return;
}
for (int u = 0; u < n; u++) {
if (adj[u].size() > 3) {
cout << "NIE\n";
return;
}
}
vector<vector<int>> sons(n);
constexpr int W = 32;
// sum when root val is 1
struct Node {
i64 sum{}, weight{};
i64 dep{};
Node grow() {
Node res = *this;
res.sum += res.weight;
res.weight *= 2;
res.dep++;
return res;
}
void update(i64 &ans) {
if (dep <= W) ans = min(ans, sum);
}
};
auto from_son = [](Node a) {
Node res = a.grow();
res.sum++, res.weight++;
return res;
};
auto merge = [](Node a, Node b) {
Node res;
res.sum += min(a.weight, b.weight);
a = a.grow(), b = b.grow();
res.sum += a.sum + b.sum;
res.weight = a.weight + b.weight;
res.sum++, res.weight++;
res.dep = max(a.dep, b.dep);
return res;
};
vector<Node> dp(n);
function<void(int, int)> pre_calc = [&](int u, int p) {
vector<Node> children;
for (int v : adj[u]) {
if (v == p) continue;
pre_calc(v, u);
children.push_back(dp[v]);
sons[u].push_back(v);
}
if (children.empty()) {
dp[u] = {1, 1, 1};
} else if (children.size() == 1) {
dp[u] = from_son(children[0]);
} else if (children.size() == 2) {
dp[u] = merge(children[0], children[1]);
}
};
pre_calc(0, -1);
i64 ans = 1e18;
if (sons[0].size() == 1) {
dp[sons[0][0]].update(ans);
} else if (sons[0].size() == 2) {
merge(dp[sons[0][0]], dp[sons[0][1]]).update(ans);
}
function<void(int, int, Node)> reroot = [&](int u, int p, Node from_fa) {
if (p != -1) {
if (sons[u].empty()) {
from_fa.update(ans);
} else if (sons[u].size() == 1) {
merge(from_fa, dp[sons[u][0]]).update(ans);
}
}
int m = sons[u].size();
if (p == -1) {
if (m == 1) {
reroot(sons[u][0], u, {1, 1});
} else if (m == 2) {
reroot(sons[u][0], u, from_son(dp[sons[u][1]]));
reroot(sons[u][1], u, from_son(dp[sons[u][0]]));
} else if (m == 3) {
reroot(sons[u][0], u, merge(dp[sons[u][1]], dp[sons[u][2]]));
reroot(sons[u][1], u, merge(dp[sons[u][0]], dp[sons[u][2]]));
reroot(sons[u][2], u, merge(dp[sons[u][0]], dp[sons[u][1]]));
}
} else {
if (m == 1) {
reroot(sons[u][0], u, from_son(from_fa));
} else if (m == 2) {
reroot(sons[u][0], u, merge(from_fa, dp[sons[u][1]]));
reroot(sons[u][1], u, merge(from_fa, dp[sons[u][0]]));
}
}
};
reroot(0, -1, Node{0, 0});
if (ans == 1e18) cout << "NIE\n";
else cout << ans << "\n";
}
#undef int
// Make bold hypotheses and verify carefully
int main() {
cin.tie(nullptr);
ios::sync_with_stdio(false);
int t = 1;
// cin >> t;
while (t--) {
solve();
};
}
詳細信息
Test #1:
score: 100
Accepted
time: 0ms
memory: 3556kb
input:
4 3 1 2 1 3 1 4
output:
6
result:
ok single line: '6'
Test #2:
score: 0
Accepted
time: 0ms
memory: 3588kb
input:
4 6 1 2 2 3 3 4 4 1 1 3 2 4
output:
NIE
result:
ok single line: 'NIE'
Test #3:
score: 0
Accepted
time: 0ms
memory: 3492kb
input:
10 10 9 3 5 10 1 4 10 8 8 3 7 3 9 6 8 6 7 2 4 5
output:
NIE
result:
ok single line: 'NIE'
Test #4:
score: 0
Accepted
time: 130ms
memory: 26788kb
input:
200000 199999 172774 188052 195063 155577 38023 148303 30605 155047 170238 19344 46835 58255 154268 109062 197059 116041 136424 12058 42062 149807 109545 115380 132322 51106 16706 162612 62234 31319 195735 80435 173898 84051 19876 102910 186924 9136 123094 117097 145054 173049 137364 152731 82662 18...
output:
NIE
result:
ok single line: 'NIE'
Test #5:
score: 0
Accepted
time: 137ms
memory: 26888kb
input:
200000 199999 168192 30733 164413 46673 175210 2329 69389 67102 33991 152553 91061 55265 166724 117726 90148 157176 34831 12213 60756 105488 121891 155192 82202 155666 102083 156661 38968 75200 190004 107321 72436 92732 64314 65004 39210 91106 70455 173568 179742 29844 126232 19552 133509 110602 131...
output:
20980030044349
result:
ok single line: '20980030044349'
Test #6:
score: 0
Accepted
time: 0ms
memory: 3608kb
input:
4 3 1 2 1 3 1 4
output:
6
result:
ok single line: '6'
Test #7:
score: 0
Accepted
time: 143ms
memory: 26864kb
input:
199021 199020 189105 111001 147300 187047 67395 102319 25317 152109 56495 115535 11656 19974 119178 6528 84571 159100 198873 156684 21161 163040 91720 165273 168305 140152 104884 119802 131 177991 35930 74934 27528 278 177640 162738 118439 69472 20365 85043 184995 54207 64542 188847 97881 167717 188...
output:
NIE
result:
ok single line: 'NIE'
Test #8:
score: 0
Accepted
time: 138ms
memory: 26532kb
input:
200000 199999 145608 31176 94180 155303 112924 85699 196865 176102 34049 30841 84924 191665 164317 97582 10102 125492 114493 20622 127660 194591 183851 21461 167689 53839 59189 126425 135853 79950 173910 4196 8134 182272 42157 63799 5109 182005 197391 154014 93467 130380 1508 66644 129681 199910 677...
output:
25146839515965
result:
ok single line: '25146839515965'
Test #9:
score: 0
Accepted
time: 130ms
memory: 27092kb
input:
200000 199999 160386 189041 24452 73297 75992 87415 87012 116413 18645 2219 151007 100916 87623 77520 51217 45179 51633 67938 183428 99891 74684 129965 186795 70345 28743 22633 107782 28087 117185 78477 46846 176763 18968 80952 118201 35872 123906 140127 65784 66684 24802 134847 42591 150517 27123 1...
output:
9894117829832
result:
ok single line: '9894117829832'
Test #10:
score: 0
Accepted
time: 135ms
memory: 26812kb
input:
200000 199999 42958 26294 73743 94861 161036 525 22581 6649 152064 106483 126795 178801 147721 107972 43433 197974 75281 163319 170596 167054 180443 168322 1443 163261 197722 164837 144573 16585 6005 143774 195029 188032 112864 105465 108330 154314 138435 103667 66734 146178 15416 123293 22322 10216...
output:
28756428378750
result:
ok single line: '28756428378750'
Test #11:
score: 0
Accepted
time: 70ms
memory: 14224kb
input:
199000 199099 149311 147296 89797 115798 124184 88539 170531 79689 134688 98182 53272 56612 68205 106798 156914 76119 158177 131 29557 179794 35380 78679 72756 116830 122836 23339 33434 147647 193860 131424 52240 110141 166223 94852 47072 83029 156709 75295 184679 174874 52901 95437 137870 130531 58...
output:
NIE
result:
ok single line: 'NIE'
Test #12:
score: 0
Accepted
time: 153ms
memory: 28672kb
input:
199999 199998 27735 110383 157138 117109 21107 95911 27141 58936 1514 195135 106403 63473 66162 42639 21681 114598 53954 191710 110249 143780 40636 40124 11560 51678 2778 182082 60435 105451 198676 123935 67639 115704 176195 189982 52257 8366 99743 141742 147381 28925 190341 131308 159677 5040 6138 ...
output:
NIE
result:
ok single line: 'NIE'
Test #13:
score: -100
Wrong Answer
time: 0ms
memory: 3588kb
input:
64 63 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14 15 15 16 16 17 17 18 18 19 19 20 20 21 21 22 22 23 23 24 24 25 25 26 26 27 27 28 28 29 29 30 30 31 31 32 32 33 33 34 34 35 35 36 36 37 37 38 38 39 39 40 40 41 41 42 42 43 43 44 44 45 45 46 46 47 47 48 48 49 49 50 50 51 51 52 52 53...
output:
15032385532
result:
wrong answer 1st lines differ - expected: 'NIE', found: '15032385532'