Submission #1189292

#TimeUsernameProblemLanguageResultExecution timeMemory
118929212345678Two Transportations (JOI19_transportations)C++20
38 / 100
3127 ms35488 KiB
#include "Azer.h"
#include <bits/stdc++.h>

using namespace std;

namespace {
    const int nx=2e3+5, inf=1e9, mx=1e6+5;

    int n, mn[nx], vs[nx], w, u, cnt, exp, sz[mx], qry;
    vector<pair<int, int>> d[nx];
    priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int ,int>>> pq;
    vector<int> in;
    pair<int, int> da, db;

    void sendtop()
    {
        if (cnt>n) return;
        qry+=sz[cnt]+11;
        if (qry>29000)
        {
            while (1)
            {

            }
        }
        while (!pq.empty()&&vs[pq.top().second]) pq.pop();
        if (pq.empty()) for (int i=0; i<sz[cnt]+11; i++) SendA(1);
        else
        {
            auto [w, u]=pq.top();
            for (int i=0; i<sz[cnt]; i++) SendA(w&(1<<i));
            for (int i=0; i<11; i++) SendA(u&(1<<i));
        }
    }
} 

void InitA(int N, int A, std::vector<int> U, std::vector<int> V,
           std::vector<int> C) {
    n=N;
    for (int i=1; i<N; i++) mn[i]=inf;
    for (int i=0; i<A; i++) d[U[i]].push_back({V[i], C[i]}), d[V[i]].push_back({U[i], C[i]});
    pq.push({0, 0});
    cnt=1;
    for (int i=1; i<=n; i++) sz[i]=ceil(log2(500*i));
    sendtop();
}

void ReceiveA(bool x) {
    in.push_back(x);
    if (in.size()<11+sz[cnt]) return;
    db={0, 0};
    for (int i=0; i<sz[cnt]; i++) db.first|=(in[i]<<i);
    for (int i=0; i<11; i++) db.second|=(in[sz[cnt]+i]<<i);
    in.clear();
    da=pq.empty()?make_pair(INT_MAX, INT_MAX):pq.top();
    auto [w, u]=min(da, db);
    if (u>=n) return;
    mn[u]=w;
    vs[u]=1;
    for (auto [v, cw]:d[u]) if (!vs[v]&&w+cw<mn[v]) mn[v]=w+cw, pq.push({w+cw, v});
    cnt++;
    sendtop();
}

std::vector<int> Answer() {
    std::vector<int> ans(n);
    for (int i=0; i<n; i++) ans[i]=mn[i];
    return ans;
}
#include "Baijan.h"
#include <bits/stdc++.h>

using namespace std;

namespace {
    const int nx=2e3+5, inf=1e9, mx=1e6+5;

    int n, mn[nx], vs[nx], w, u, cnt, exp, sz[mx];
    vector<pair<int, int>> d[nx];
    priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int ,int>>> pq;
    vector<int> in;
    pair<int, int> da, db;

    void sendtop()
    {
        if (cnt>n) return;
        while (!pq.empty()&&vs[pq.top().second]) pq.pop();
        if (pq.empty()) for (int i=0; i<sz[cnt]+11; i++) SendB(1);
        else
        {
            auto [w, u]=pq.top();
            for (int i=0; i<sz[cnt]; i++) SendB(w&(1<<i));
            for (int i=0; i<11; i++) SendB(u&(1<<i));
        }
    }
} 

void InitB(int N, int B, std::vector<int> S, std::vector<int> T,
           std::vector<int> D) {
    n=N;
    for (int i=1; i<N; i++) mn[i]=inf;
    for (int i=0; i<B; i++) d[S[i]].push_back({T[i], D[i]}), d[T[i]].push_back({S[i], D[i]});
    pq.push({0, 0});
    cnt=1;
    for (int i=1; i<=n; i++) sz[i]=ceil(log2(500*i));
    sendtop();
}

void ReceiveB(bool y) {
    in.push_back(y);
    //cout<<"debug "<<sz[cnt]<<' '<<cnt<<'\n';
    if (cnt>n||in.size()<11+sz[cnt]) return;
    da={0, 0};
    for (int i=0; i<sz[cnt]; i++) da.first|=(in[i]<<i);
    for (int i=0; i<11; i++) da.second|=(in[sz[cnt]+i]<<i);
    in.clear();
    db=pq.empty()?make_pair(INT_MAX, INT_MAX):pq.top();
    auto [w, u]=min(da, db);
    if (u>=n) return;
    mn[u]=w;
    vs[u]=1;
    for (auto [v, cw]:d[u]) if (!vs[v]&&w+cw<mn[v]) mn[v]=w+cw, pq.push({w+cw, v});
    cnt++;
    sendtop();
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...