QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#546034 | #6306. Chase Game | Rilllo | WA | 0ms | 3804kb | C++14 | 1.9kb | 2024-09-03 19:05:36 | 2024-09-03 19:05:36 |
Judging History
answer
#include <bits/stdc++.h>
using i64 = long long;
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
int n, m, k, d;
std::cin >> n >> m >> k >> d;
k--;
std::vector<std::vector<int>> adj(n);
for (int i = 0; i < m; i++) {
int x, y;
std::cin >> x >> y;
x--, y--;
adj[x].push_back(y);
adj[y].push_back(x);
}
i64 inf = 1E12;
std::vector<int> p(n), dis(n, n);
std::vector<i64> dp(n,inf);
p[k] = d;
std::queue<int> q;
q.push(k);
while (!q.empty()) {
auto x = q.front();
q.pop();
if (p[x] == 1) {
continue;
}
for (auto y : adj[x]) {
if (p[y] == 0) {
p[y] = p[x] - 1;
q.push(y);
}
}
}
std::priority_queue<std::pair<i64,int>, std::vector<std::pair<i64, int>>, std::greater<>> h;
for(auto v : adj[0]){
if(p[v]!=0){
dp[v]=p[v];
h.push({dp[v], v});
}
}
while (!q.empty()) q.pop();
dis[n - 1] = 0;
q.push(n - 1);
while (!q.empty()) {
int x = q.front();
q.pop();
for (auto y : adj[x]) {
if (dis[y] > dis[x] + 1) {
dis[y] = dis[x] + 1;
q.push(y);
}
}
}
for (int i = 0; i < n; i++) {
dis[i]++;
}
i64 ans = inf;
ans = std::min(ans, dp[n - 1]);
auto cal = [&](int x) {
i64 time = 1LL * x / d * (1 + d) * d / 2;
x %= d;
if (x > 0) {
time += 1LL * (2 * d - x + 1) * x / 2;
}
return time;
};
while (!h.empty()) {
auto [val, x] = h.top();
h.pop();
// std::cout << x << " " << val << "\n";
if (val > dp[x]) {
continue;
}
for (auto y : adj[x]) {
if (p[y] == 0) {
ans = std::min(ans, val + cal(dis[y]));
// std::cout << x << " " << val << " " << cal(dis[x]) << "\n";
} else if (dp[y] > dp[x] + p[y]) {
dp[y] = dp[x] + p[y];
h.emplace(dp[y], y);
}
}
}
for(auto v:adj[0]) {
if (p[v] == 0) {
ans = std::min(ans, cal(dis[v]));
}
}
std::cout << ans << "\n";
return 0;
}
详细
Test #1:
score: 100
Accepted
time: 0ms
memory: 3608kb
input:
5 5 3 1 1 2 2 4 4 5 1 3 3 5
output:
2
result:
ok 1 number(s): "2"
Test #2:
score: 0
Accepted
time: 0ms
memory: 3588kb
input:
13 17 12 3 1 2 2 3 3 4 4 13 5 13 7 8 7 9 7 10 7 11 7 6 12 7 1 8 8 9 9 10 10 11 11 6 6 13
output:
7
result:
ok 1 number(s): "7"
Test #3:
score: 0
Accepted
time: 0ms
memory: 3804kb
input:
10 9 4 1 4 3 1 2 7 6 6 5 8 9 9 10 5 4 8 7 3 2
output:
9
result:
ok 1 number(s): "9"
Test #4:
score: 0
Accepted
time: 0ms
memory: 3608kb
input:
10 20 9 1 9 5 2 9 4 5 10 5 7 3 1 8 7 1 7 5 3 4 3 1 7 8 3 8 9 3 10 6 9 1 1 6 8 5 6 2 1 10 2 1
output:
1
result:
ok 1 number(s): "1"
Test #5:
score: 0
Accepted
time: 0ms
memory: 3580kb
input:
10 20 3 1 1 4 6 7 5 4 5 3 2 1 8 1 7 8 2 6 2 4 4 8 9 5 1 10 7 4 5 8 4 10 2 5 6 10 4 6 3 7 1 3
output:
1
result:
ok 1 number(s): "1"
Test #6:
score: 0
Accepted
time: 0ms
memory: 3548kb
input:
10 20 4 1 2 7 6 4 2 3 2 4 6 5 8 5 6 7 10 2 3 10 1 8 3 9 3 7 1 7 5 1 6 1 3 4 2 1 5 2 9 2 9 10
output:
2
result:
ok 1 number(s): "2"
Test #7:
score: -100
Wrong Answer
time: 0ms
memory: 3492kb
input:
10 20 1 10 10 9 2 5 7 8 7 10 10 8 8 9 5 6 3 1 6 4 7 9 2 3 3 6 2 1 8 6 5 8 7 4 4 3 2 4 4 1 9 6
output:
1000000000000
result:
wrong answer 1st numbers differ - expected: '24', found: '1000000000000'