QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#301292 | #5054. City Brain | zzuqy# | WA | 2685ms | 102064kb | C++14 | 2.4kb | 2024-01-09 17:21:28 | 2024-01-09 17:21:29 |
Judging History
answer
#include <bits/stdc++.h>
#define N 5009
using namespace std;
vector<int>to[N];
int n, m, k;
int d[N][N];
void bfs(int st) {
queue<int>q;
q.push(st);
d[st][st] = 0;
while (!q.empty()) {
int x = q.front();
q.pop();
for (auto y : to[x]) {
if (d[st][y] != 1000000000)
continue;
d[st][y] = d[st][x] + 1;
q.push(y);
}
}
}
double calc(int a, int b, int kt) {
if (a == 0 && b == 0)
return 0;
kt += a + b;
if (b == 0)
return 1.0 * (kt % a) / (kt / a + 1) + 1.0 * (a - kt % a) / (kt / a);
if (a == 0)
return 2.0 * (kt % b) / (kt / b + 1) + 2.0 * (b - kt % b) / (kt / b);
double ans = 1000000000;
for (int ta = 1; ta <= (kt - b) / a; ta++) {
int tb = (kt - ta * a) / b;
assert(tb >= 1 && a * ta + b * tb <= kt);
//cout << ta << " " << ta << endl;
double tmp = 1.0 * a / ta + 2.0 * b / tb;
{
if (kt - a * ta - b * tb >= a)
continue;
ans = min(ans, tmp - (kt - a * ta - b * tb) * 1.0 / ta / (ta + 1));
}
{
if (kt - a * ta - b * tb >= b)
continue;
ans = min(ans, tmp - (kt - a * ta - b * tb) * 2.0 / tb / (tb + 1));
//flag |= 2;
}
if (tmp < ans)
ans = tmp;
}
//cout << 1.0 * mntb / mnta << endl;
return ans;
}
int mn[N];
int main() {
cin >> n >> m >> k;
for (int i = 1; i <= m; i++) {
int a, b;
cin >> a >> b;
to[a].push_back(b);
to[b].push_back(a);
}
fill(d[0], d[0] + N * N, 1000000000);
for (int i = 1; i <= n; i++)
bfs(i);
/*
for (int i = 1; i <= n; i++, cout << endl)
for (int j = 1; j <= n; j++)
cout << d[i][j] << " ";
*/
int s1, t1, s2, t2;
cin >> s1 >> t1 >> s2 >> t2;
fill(mn, mn + N, 1000000000);
mn[0] = d[s1][t1] + d[s2][t2];
for (int a = 1; a <= n; a++) {
for (int b = 1; b <= n; b++) {
if (d[s1][a] == 1000000000 || d[b][t1] == 1000000000 || d[a][b] == 1000000000)
continue;
if (d[s2][a] == 1000000000 || d[b][t2] == 1000000000)
continue;
mn[d[a][b]] = min(mn[d[a][b]], d[s1][a] + d[b][t1] + d[s2][a] + d[b][t2]);
mn[d[a][b]] = min(mn[d[a][b]], d[s1][a] + d[b][t1] + d[s2][b] + d[a][t2]);
}
}
double ans = 1000000000;
for (int i = 0; i <= n; i++) {
if (mn[i] == 1000000000)
continue;
//0cout << mn[i] << " " << i << " " << calc(mn[i], i, k) << endl;
ans = min(ans, calc(mn[i], i, k));
}
cout << fixed << setprecision(15) << ans;
}
/*
6 5 100000
1 2
3 2
2 4
4 5
4 6
1 5 2 6
*/
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 0ms
memory: 101856kb
input:
6 5 1 1 2 3 2 2 4 4 5 4 6 1 5 3 6
output:
5.000000000000000
result:
ok found '5.000000000', expected '5.000000000', error '0.000000000'
Test #2:
score: 0
Accepted
time: 3ms
memory: 101984kb
input:
1 0 100 1 1 1 1
output:
0.000000000000000
result:
ok found '0.000000000', expected '0.000000000', error '-0.000000000'
Test #3:
score: 0
Accepted
time: 0ms
memory: 101860kb
input:
4 2 3 1 2 3 4 1 2 3 4
output:
0.833333333333333
result:
ok found '0.833333333', expected '0.833333333', error '0.000000000'
Test #4:
score: 0
Accepted
time: 0ms
memory: 101868kb
input:
6 5 1 1 2 3 2 2 4 4 5 4 6 1 5 6 3
output:
5.000000000000000
result:
ok found '5.000000000', expected '5.000000000', error '0.000000000'
Test #5:
score: 0
Accepted
time: 2685ms
memory: 102064kb
input:
5000 4999 1000000000 1 2 1 3 1 4 1 5 6 2 7 3 8 4 9 5 10 6 11 7 12 8 13 9 14 10 15 11 16 12 17 13 18 14 19 15 20 16 21 17 22 18 23 19 24 20 25 21 26 22 27 23 28 24 29 25 30 26 31 27 32 28 33 29 34 30 35 31 36 32 37 33 38 34 39 35 40 36 41 37 42 38 43 39 44 40 45 41 46 42 47 43 48 44 49 45 50 46 51 47...
output:
0.024989876075614
result:
ok found '0.024989876', expected '0.024989876', error '0.000000000'
Test #6:
score: 0
Accepted
time: 2095ms
memory: 101920kb
input:
10 9 305097549 2 1 8 9 6 7 5 4 8 7 4 3 2 3 9 10 6 5 4 3 2 1
output:
0.000000013110561
result:
ok found '0.000000013', expected '0.000000013', error '0.000000000'
Test #7:
score: 0
Accepted
time: 3ms
memory: 101876kb
input:
10 9 9 4 2 3 6 8 6 2 1 7 9 5 2 2 3 10 9 7 4 8 7 9 5
output:
3.833333333333333
result:
ok found '3.833333333', expected '3.833333333', error '0.000000000'
Test #8:
score: 0
Accepted
time: 0ms
memory: 101968kb
input:
10 9 19 5 2 4 1 2 1 6 5 10 8 8 1 9 3 7 6 1 3 7 7 6 4
output:
0.700000000000000
result:
ok found '0.700000000', expected '0.700000000', error '0.000000000'
Test #9:
score: -100
Wrong Answer
time: 4ms
memory: 101936kb
input:
100 99 149 82 77 11 14 99 94 29 24 41 31 52 57 64 73 42 32 85 84 88 86 54 59 75 66 38 28 92 90 9 19 60 61 24 19 24 31 21 18 38 47 67 74 79 89 64 66 34 29 23 16 87 83 11 16 2 4 10 11 76 77 36 32 18 22 71 72 79 77 97 96 47 48 43 34 63 55 51 45 91 94 3 1 31 39 41 44 51 58 6 10 48 54 74 76 7 15 18 13 32...
output:
1.815151515151515
result:
wrong answer 1st numbers differ - expected: '1.8059829', found: '1.8151515', error = '0.0050768'