Submission #747970

# Submission time Handle Problem Language Result Execution time Memory
747970 2023-05-25T08:39:54 Z saayan007 City Mapping (NOI18_citymapping) C++17
13 / 100
5 ms 8276 KB
#include "bits/stdc++.h"
#include "citymapping.h"
using namespace std;
using ll = long long;
#define fr first
#define sc second
#define eb emplace_back
#define nl endl

ll dist[1001][1001];

int qry(int x, int y) {
    if(dist[x][y] != -1) return dist[x][y];
    dist[x][y] = abs(get_distance(x, y));
    dist[y][x] = dist[x][y];
    return dist[x][y];
}

void find_roads(int N, int Q, int A[], int B[], int W[]) {
    for(int i = 1; i <= N; ++i) {
        for(int j = 1; j <= N; ++j) {
            dist[i][j] = (i == j ? 0 : -1);
        }
    }

    vector<pair<int, ll>> adj[N + 1];
    int x = 2;
    for(int i = 3; i <= N; ++i) {
        if(qry(1, i) < qry(1, x)) x = i;
    }
    /* cout << 1 << ' ' << x << nl; */
    adj[1].eb(x, qry(1, x));
    adj[x].eb(1, qry(1, x));
    vector<pair<ll, int>> right, left;
    for(int i = 1; i <= N; ++i) {
        if(i == 1 || i == x) continue;
        if(qry(1, i) > qry(x, i)) right.eb(qry(x, i), i);
        else left.eb(qry(1, i), i);
    }
    sort(left.begin(), left.end());
    sort(right.begin(), right.end());
    /* for(auto [t, i] : left) cout << t << "," << i << ' '; cout << nl; */
    /* for(auto [t, i] : right) cout << t << ',' << i << ' '; cout << nl; */

    int m = left.size();
    if(m) {
        int y = left[0].sc;
        adj[y].eb(1, qry(1, y));
        adj[1].eb(y, qry(1, y));
        for(int i = 1; i < m; ++i) {
            y = left[i].sc;
            int z = left[i - 1].sc;
            adj[y].eb(z, qry(1, y) - qry(1, z));
            adj[z].eb(y, qry(1, y) - qry(1, z));
        }
    }

    m = right.size();
    if(m) {
        int y = right[0].sc;
        adj[y].eb(x, qry(x, y));
        adj[x].eb(y, qry(x, y));
        for(int i = 1; i < m; ++i) {
            y = right[i].sc;
            int z = right[i - 1].sc;
            adj[y].eb(z, qry(x, y) - qry(x, z));
            adj[z].eb(y, qry(x, y) - qry(x, z));
        }
    }

    int ptr = 0;
    for(int i = 1; i <= N; ++i) {
        for(auto [j, w] : adj[i]) {
            if(i < j) continue;
            A[ptr] = i; B[ptr] = j; W[ptr] = w;
            ++ptr;
        }
    }
    return;
}
# Verdict Execution time Memory Grader output
1 Correct 5 ms 8276 KB Correct: 1995 out of 500000 queries used.
2 Incorrect 5 ms 8276 KB Reported list of edges differ from actual.
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 5 ms 8276 KB Correct: 1995 out of 500000 queries used.
2 Incorrect 5 ms 8276 KB Reported list of edges differ from actual.
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 5 ms 8276 KB Correct: 1979 out of 12000 queries used.
2 Correct 5 ms 8276 KB Correct: 1983 out of 12000 queries used.
3 Correct 5 ms 8276 KB Correct: 1997 out of 12000 queries used.
4 Correct 5 ms 8276 KB Correct: 1983 out of 12000 queries used.
5 Correct 5 ms 8276 KB Correct: 1979 out of 12000 queries used.
# Verdict Execution time Memory Grader output
1 Correct 5 ms 8276 KB Correct: 1979 out of 12000 queries used.
2 Correct 5 ms 8276 KB Correct: 1983 out of 12000 queries used.
3 Correct 5 ms 8276 KB Correct: 1997 out of 12000 queries used.
4 Correct 5 ms 8276 KB Correct: 1983 out of 12000 queries used.
5 Correct 5 ms 8276 KB Correct: 1979 out of 12000 queries used.
6 Incorrect 5 ms 8276 KB Reported list of edges differ from actual.
7 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 5 ms 8276 KB Correct: 1995 out of 500000 queries used.
2 Incorrect 5 ms 8276 KB Reported list of edges differ from actual.
3 Halted 0 ms 0 KB -