제출 #1168614

#제출 시각아이디문제언어결과실행 시간메모리
1168614Br3adCity Mapping (NOI18_citymapping)C++20
컴파일 에러
0 ms0 KiB
#include <iostream>
#include <fstream>
#include <iomanip>
#include <algorithm>
#include <functional>
#include <numeric>
#include <cstring>
#include <string>
#include <cmath>
#include <vector>
#include <queue>
#include <stack>
#include <set>
#include <map>

using namespace std;
#define ll long long
#define ull unsigned long long
#define f first
#define s second
#define PF push_front
#define PB push_back
#define MP make_pair

#define all(v) v.begin(), v.end()
#define rall(v) v.rbegin(), v.rend()

#define max(a, b) ((a > b)? a : b)
#define min(a, b) ((a < b)? a : b)
#define max3(a, b, c) max(max(a, b), c)
#define min3(a, b, c) min(min(a, b), c)

const int N = 1e3 + 5;
const int M = 1e9 + 7; 
const int inf = 0x3f3f3f3f;
const ll int INF = 1e18;

struct DSU{
    vector<int> parent;

    DSU(int n){
        parent = vector<int>(n+1);
        iota(all(parent), 0);
    }

    int find_parent(int p){
        return (parent[p] == p)? p : parent[p] = find_parent(parent[p]);
    }

    bool merge(int a, int b){
        int pa = find_parent(a);
        int pb = find_parent(b);
        if(pa == pb) return false;
        parent[pa] = pb;
        return true;
    }
};

// ll get_distance(int x, int y){
//     int dis[6][6];
//     dis[1][2] = 9;
//     dis[1][3] = 15;
//     dis[1][4] = 8;
//     dis[1][5] = 18;
//     dis[2][3] = 8;
//     dis[2][4] = 1;
//     dis[2][5] = 11;
//     dis[3][4] = 7;
//     dis[3][5] = 3;
//     dis[4][5] = 10;
//     if(x > y) swap(x, y);
//     return dis[x][y];
// }

void find_roads(int n, int q, int a[], int b[], int w[]){
    vector<vector<ll>> dis(n+1, vector<ll>(n+1));
    vector<tuple<ll, int, int>> edge;

    for(int i = 1; i <= n; i++){
        for(int j = i+1; j <= n; j++){
            dis[i][j] = get_distance(i, j);
            edge.PB({dis[i][j], i, j});
        }
    }

    sort(all(edge));
    DSU dsu(n);

    int cnt = 0;
    for(int i = 0; i < (int)dis.size(); i++){
        auto [weight, u, v] = edge[i];
        if(dsu.merge(u, v)){
            a[cnt] = u;
            b[cnt] = v;
            w[cnt] = weight;
            cnt++;
        }
    }
}

// int main(){
//     
//     ios::sync_with_stdio(false);
//     cin.tie(NULL);
//     
//     // ifstream cin();
//     // ofstream cout();
//     
//     const int sz = 5;
//     int a[sz], b[sz], w[sz];
//     find_roads(5, 50000, a, b, w);
//     
//     for(int i = 0; i < sz-1; i++){
//         cout << a[i] << ' ' << b[i] << ' ' << w[i] << endl;
//     }
// }

컴파일 시 표준 에러 (stderr) 메시지

citymapping.cpp: In function 'void find_roads(int, int, int*, int*, int*)':
citymapping.cpp:81:25: error: 'get_distance' was not declared in this scope
   81 |             dis[i][j] = get_distance(i, j);
      |                         ^~~~~~~~~~~~