Submission #389663

#TimeUsernameProblemLanguageResultExecution timeMemory
389663denkendoemeerTwo Transportations (JOI19_transportations)C++14
100 / 100
938 ms48844 KiB
#include<bits/stdc++.h>
#include "Azer.h"
#define inf 1e9
using namespace std;
namespace {
int n,cnt1,cnt2,nr,dist1,dist2;
bool ok;
vector<pair<int,int>>*g;
vector<int>dist;
priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>>pq;
void update(int nod)
{
    for(auto it:g[nod]){
        if (dist[nod]+it.second<-dist[it.first]){
            dist[it.first]=-(dist[nod]+it.second);
            pq.push(make_pair(dist[nod]+it.second,it.first));
        }
    }
}
void query()
{
    int i;
    if (cnt1==0)
        return ;
    cnt1--;
    while(1){
        if (pq.empty()){
            dist2=511;
            for(i=8;i>=0;i--)
                SendA((dist2>>i)&1);
            return ;
        }
        pair<int,int>aux=pq.top();
        if (aux.first+dist[aux.second]==0){
            dist2=aux.first-dist1;
            for(i=8;i>=0;i--)
                SendA((dist2>>i)&1);
                return ;
        }
        pq.pop();
    }
}
}
void InitA(int N,int a,vector<int>u,vector<int>v,vector<int>c)
{
    n=N;
    g=new vector<pair<int,int>>[n];
    int i;
    for(i=0;i<a;i++){
        g[u[i]].push_back(make_pair(v[i],c[i]));
        g[v[i]].push_back(make_pair(u[i],c[i]));
    }
    dist.push_back(0);
    for(i=1;i<n;i++)
        dist.push_back(-inf);
    cnt1=n-1;
    dist1=0;
    update(0);
    query();
    ok=0;
    cnt2=0;
    nr=0;
}
void ReceiveA(bool x)
{
    int i;
    nr*=2;
    nr+=x;
    if (ok){
        cnt2++;
        if (cnt2==11){
            dist1+=dist2;
            dist[nr]=dist1;
            update(nr);
            query();
            ok=0;
            cnt2=0;
            nr=0;
        }
    }
    else{
        cnt2++;
        if (cnt2==9){
            if (nr>=dist2){
                int aux=pq.top().second;
                for(i=10;i>=0;i--)
                    SendA((aux>>i)&1);
                dist1+=dist2;
                dist[aux]=dist1;
                update(aux);
                query();
            }
            else{
                dist2=nr;
                ok=1;
            }
            cnt2=0;
            nr=0;
        }
    }
}
std::vector<int> Answer()
{
    return dist;
}
#include<bits/stdc++.h>
#define inf 1e9
#include "Baijan.h"
using namespace std;
namespace {
int n,cnt1,cnt2,nr,dist1,dist2;
bool ok;
vector<pair<int,int>>*g;
vector<int>dist;
priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>>pq;
void update(int nod)
{
    for(auto it:g[nod]){
        if (dist[nod]+it.second<-dist[it.first]){
            dist[it.first]=-(dist[nod]+it.second);
            pq.push(make_pair(dist[nod]+it.second,it.first));
        }
    }
}
void query()
{
    int i;
    if (cnt1==0)
        return ;
    cnt1--;
    while(1){
        if (pq.empty()){
            dist2=511;
            for(i=8;i>=0;i--)
                SendB((dist2>>i)&1);
            return ;
        }
        pair<int,int>aux=pq.top();
        if (aux.first+dist[aux.second]==0){
            dist2=aux.first-dist1;
            for(i=8;i>=0;i--)
                SendB((dist2>>i)&1);
            return ;
        }
        pq.pop();
    }
}
}
void InitB(int N,int b,vector<int>s,vector<int>t,vector<int>d)
{
    n=N;
    int i;
    g=new vector<pair<int, int>>[n];
    for(i=0;i<b;i++){
        g[s[i]].push_back(make_pair(t[i],d[i]));
        g[t[i]].push_back(make_pair(s[i],d[i]));
    }
    dist.push_back(0);
    for(i=1;i<N;i++)
        dist.push_back(-inf);
    cnt1=n-1;
    dist1=0;
    update(0);
    query();
    ok=0;
    cnt2=0;
    nr=0;
}
void ReceiveB(bool y)
{
    int i;
    nr*=2;
    nr+=y;
    if (ok){
        ++cnt2;
        if (cnt2==11){
            dist1+=dist2;
            dist[nr]=dist1;
            update(nr);
            query();
            ok=0;
            cnt2=0;
            nr=0;
        }
    }
    else{
        ++cnt2;
        if (cnt2==9){
            if (nr>dist2){
                int aux=pq.top().second;
                for(i=10;i>=0;i--)
                    SendB((aux>>i)&1);
                dist1+=dist2;
                dist[aux]=dist1;
                update(aux);
                query();
            }
            else{
                dist2=nr;
                ok=1;
            }
            cnt2=0;
            nr=0;
        }
    }
}

Compilation message (stderr)

Azer.cpp: In function 'void {anonymous}::query()':
Azer.cpp:36:13: warning: this 'for' clause does not guard... [-Wmisleading-indentation]
   36 |             for(i=8;i>=0;i--)
      |             ^~~
Azer.cpp:38:17: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'for'
   38 |                 return ;
      |                 ^~~~~~
#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...