QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#879027#7938. Graph Racefractal#WA 6ms64716kbC++171.9kb2025-02-01 19:55:312025-02-01 19:55:32

Judging History

This is the latest submission verdict.

  • [2025-02-01 19:55:32]
  • Judged
  • Verdict: WA
  • Time: 6ms
  • Memory: 64716kb
  • [2025-02-01 19:55:31]
  • Submitted

answer

#include<bits/stdc++.h>
using namespace std;

#define F first
#define S second
#define sz(x) (int)x.size()
#define all(x) x.begin(), x.end()

const int N = 1e6;
long long INF = 1e18;

int n, m;
long long a[N], b[N], d[N], ans[N], val[N], dist[N];
int used[N];
vector<int> g[N], h[N];

void dfs(int v, int D) {
    used[v] = 1;
    dist[v] = D;
    ans[v] = -INF;
    for (int u : h[v]) {
        if (used[u] == 2) continue;
        assert(used[u] != 1);
        dfs(u, D + 1);
        ans[v] = max(ans[v], max(ans[u], a[u] - b[u] * D));
    }
    used[v] = 2;
}

int main() {
    cin.tie(0)->sync_with_stdio(0);
    cin >> n >> m;
    for (int i = 1; i <= n; ++i) {
        cin >> a[i] >> b[i];
        a[i + n] = a[i];
        b[i + n] = b[i];
    }
    for (int i = 1, v, u; i <= m; ++i) {
        cin >> v >> u;
        g[v].push_back(u);
        g[u].push_back(v);
    }
    for (int i = 1; i <= n; ++i) {
        d[i] = -1;
    }
    d[1] = 0;
    queue<int> q;
    q.push(1);
    multiset<long long> lol;
    while (q.size()) {
        int v = q.front();
        lol.insert(a[v] - b[v] * (d[v] + 1));
        q.pop();
        for (auto u : g[v]) {
            if (d[u] == -1) {
                d[u] = d[v] + 1;
                q.push(u);
            }
        }
    }
    for (int v = 1; v <= n; ++v) {
        val[v] = -INF;
        for (auto u : g[v]) {
            if (d[u] == d[v] + 1) {
                h[v].push_back(u);
                h[v + n].push_back(u + n);
            }
            else if (d[u] == d[v]) {
                h[v].push_back(u + n);
            }
        }
    }
    dfs(1, 0);
    for (int v : g[1]) {
        lol.erase(lol.find(a[v] - b[v] * (d[v] + 1)));
        val[v] = max(ans[v], *lol.rbegin());
        lol.insert((a[v] - b[v] * (d[v] + 1)));
    }
    for (int i = 1; i <= n; ++i) {
        if (val[i] != -INF)
            cout << val[i] << '\n';
    }
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 6ms
memory: 63388kb

input:

5 4
0 0
1 1
1 1
5 1
100 40
4 1
1 2
1 3
4 5

output:

3
3
60

result:

ok 3 number(s): "3 3 60"

Test #2:

score: 0
Accepted
time: 5ms
memory: 63444kb

input:

6 10
903568159 700448725
628912797 731062359
620179636 21330815
551246171 800423583
200754983 633226914
263013360 961926530
3 5
3 6
5 2
4 2
4 3
1 3
6 2
4 5
6 4
3 2

output:

203119434

result:

ok 1 number(s): "203119434"

Test #3:

score: 0
Accepted
time: 5ms
memory: 64716kb

input:

6 11
326018245 63396259
60284282 902890472
784478565 924092847
151131403 525824310
258238138 570218648
320719991 364667070
4 5
3 6
3 2
2 6
2 5
5 6
5 3
6 4
4 2
2 1
1 6

output:

262621986
262621986

result:

ok 2 number(s): "262621986 262621986"

Test #4:

score: 0
Accepted
time: 4ms
memory: 64556kb

input:

6 12
895951979 121560152
123336598 105332219
498719969 690411123
228006059 339956946
882834157 112713753
487497361 293201352
2 5
3 6
4 5
1 3
6 4
4 3
2 3
5 6
2 1
1 5
4 2
6 2

output:

774391827
774391827
774391827

result:

ok 3 number(s): "774391827 774391827 774391827"

Test #5:

score: -100
Wrong Answer
time: 6ms
memory: 63204kb

input:

6 13
318402066 327207694
186388913 455257614
859881730 743827329
679402919 528782489
239844004 967189368
257292425 413166361
3 4
6 2
3 5
3 2
2 4
4 6
5 2
1 5
1 2
4 5
6 5
1 3
6 1

output:

-8805628
-8805628
150620430
-8805628

result:

wrong answer 1st numbers differ - expected: '150620430', found: '-8805628'