Submission #1249316

#TimeUsernameProblemLanguageResultExecution timeMemory
1249316tvgk한자 끝말잇기 (JOI14_kanji)C++20
Compilation error
0 ms0 KiB
#include "Annalib.h"
#include<bits/stdc++.h>
using namespace std;
#define task "a"
#define se second
#define fi first
#define ll long long
#define ii pair<int, int>
const long mxN = 3e2 + 7;
const ll inf = 4e18 + 7;

vector<int> ans[10];
ll mn[mxN][mxN], cost[mxN][10];

void Anna(int n, int m, int a[], int b[], ll c[], int q, int s[], int t[], int k, int u[])
{
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
            mn[i][j] = inf;
        mn[i][i] = 0;
    }

    for (int i = 0; i < m; i++)
        mn[a[i]][b[i]] = c[i];

    for (int i = 0; i < k; i++)
        mn[a[i]][b[i]] = inf;

    // Floyd tim min dis
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            for (int u = 0; u < n; u++)
                mn[j][u] = min(mn[j][u], mn[j][i] + mn[i][u]);
        }
    }

    // cost[i][j] truy van s[i] -> t[i] di qua canh u[j]
    for (int i = 0; i < q; i++)
    {
        for (int j = 0; j < k; j++)
            cost[i][j] = mn[s[i]][a[u[j]]] + mn[b[u[j]]][t[i]];
        cost[i][k] = mn[s[i]][t[i]];
        ans[0].push_back(i);
    }

    vector<ii> mem;
    for (int i = 1; i <= k; i++)
    {
        ll tmp = 0;
        if (i < k)
            tmp = c[u[i]];

        vector<int> rem;
        for (int j = 0; j < i; j++)
        {
            for (int v : ans[j])
            {
                if (cost[v][j] + c[u[j]] < cost[v][i] + tmp)
                    rem.push_back(v);
                else
                    ans[i].push_back(v);
            }

            mem.push_back({ans[j].size(), rem.size()});
            ans[j] = rem;
        }
    }

    reverse(mem.begin(), mem.end());
    ll mask = 0;
    for (ii i : mem)
        mask = mask * i.fi + i.se;

    while (mask)
    {
        Tap(mask & 1);
        mask >>= 1;
    }
}
#include "Brunolib.h"
#include<bits/stdc++.h>
using namespace std;
#define task "a"
#define se second
#define fi first
#define ll long long
#define ii pair<int, int>
const long mxN = 3e2 + 7;
const ll inf = 4e18 + 7;

ll mn[mxN][mxN], cost[mxN][mxN];
vector<ii> w[mxN];
vector<int> ans[10];
int trace[mxN][mxN], a[mxN], b[mxN], c[mxN], edge[100];

void Dij(int n, int stt)
{
    for (int i = 0; i < n; i++)
        mn[stt][i] = inf;

    priority_queue<ii, vector<ii>, greater<ii>> pq;
    pq.push({0, stt});
    mn[stt][stt] = 0;
    while (pq.size())
    {
        ii j = pq.top();
        pq.pop();

        if (j.fi != mn[stt][j.se])
            continue;

        for (ii i : w[j.se])
        {
            if (mn[stt][i.fi] > j.fi + c[i.se])
            {
                mn[stt][i.fi] = j.fi + c[i.se];
                trace[stt][i.fi] = i.se;
                pq.push({mn[stt][i.fi], i.fi});
            }
        }
    }
}

void Trace(int v, int u)
{
    vector<int> ans;
    while (v != u)
    {
        ans.push_back(trace[u][v]);
        v = a[trace[u][v]];
    }
    reverse(ans.begin(), ans.end());
    for (int i : ans)
        cout << i << " ";
}

void Bruno(int n, int m, int A[], int B[], long long C[], int q, int s[], int t[], int k, int u[], int l, ll x[])
{
    for (int i = 0; i < m; i++)
    {
        a[i] = A[i];
        b[i] = B[i];
        c[i] = C[i];

        if (c[i] != -1)
            w[a[i]].push_back({b[i], i});
    }

    for (int i = 0; i < n; i++)
        Dij(n, i);

    // cost[i][j] truy van s[i] -> t[i] di qua canh u[j]
    for (int i = 0; i < q; i++)
    {
        for (int j = 0; j < k; j++)
            cost[i][j] = mn[s[i]][a[u[j]]] + mn[b[u[j]]][t[i]];
        cost[i][k] = mn[s[i]][t[i]];
        ans[0].push_back(i);
    }

    ll mask = 0;
    for (int i = 0; i < l; i++)
        mask += (x[i] << i);

    for (int i = 1; i <= k; i++)
    {
        for (int j = 0; j < i; j++)
        {
            sort(ans[j].begin(), ans[j].end(), [&](int u, int v)
            {
                return (cost[u][j] - cost[u][i]) < (cost[v][j] - cost[v][i]);
            });

            int rem = mask % ans[j].size();
            while (ans[j].size() > rem)
            {
                ans[i].push_back(ans[j].back());
                ans[j].pop_back();
            }
            mask /= ans[j].size();
        }
    }

    for (int i = 0; i <= k; i++)
    {
        for (int j : ans[i])
            edge[j] = i;
    }

    for (int i = 0; i < q; i++)
    {
        // s[i], t[i];

        if (edge[i] == k)
            Trace(t[i], s[i]);
        else
        {
            Trace(a[edge[i]], s[i]);
            cout << edge[i] << " ";
            Trace(b[edge[i]], t[i]);
        }
        cout << '\n';
    }
}

Compilation message (stderr)

# 2번째 컴파일 단계

/usr/bin/ld: /tmp/cc1up3nC.o: in function `main':
grader_bruno.c:(.text.startup+0x56f): undefined reference to `Bruno(int, int, int*, int*, long long*, int, int*, int*, int, int*, int, int*)'
collect2: error: ld returned 1 exit status