QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#860352#9569. SubwaylunchboxWA 2ms29464kbC++172.5kb2025-01-18 12:46:122025-01-18 12:46:12

Judging History

This is the latest submission verdict.

  • [2025-01-18 12:46:12]
  • Judged
  • Verdict: WA
  • Time: 2ms
  • Memory: 29464kb
  • [2025-01-18 12:46:12]
  • Submitted

answer

#include<bits/stdc++.h>
using namespace std;
using ll=long long;
const int N=2e5,K=2e5,M=2e5;
const ll INF=4e18;
int n,k,a[K],b[K];
int m;
int w[M],uu[M],vv[M],ne[M],id[M];
bool done[M];
vector<int>from[N],to[N];
ll d[M];
using line=array<ll,2>;
ll ev(const line&l,ll x){return l[0]+l[1]*x;}
const line unit{INF,0};
struct S{
    vector<int>e;
    ll x(int i){return a[id[e.at(i)]];}
    int n,pt;
    vector<line>st;
    void init(vector<int>e_){
        if(e_.empty()){n=0;return;}
        e=e_,n=e.size(),pt=0;
        sort(e.begin(),e.end(),[&](int i,int j){return a[id[i]]<a[id[j]];});
        st.assign(n*4,unit);
    }
    void add(int k,int l,int r,line v){
        int m=(l+r)/2;
        if(ev(v,x(m))<ev(st[k],x(m)))swap(st[k],v);
        if(l<r&&v[1]!=st[k][1])v[1]>st[k][1]?add(k*2,l,m,v):add(k*2+1,m+1,r,v);
    }
    void add(line x){if(n)add(1,0,n-1,x);}
    ll qry(int k,int l,int r,int i){
        if(l==r)return ev(st[k],x(i));
        int m=(l+r)/2;
        return min(ev(st[k],x(i)),i<=m?qry(k*2,l,m,i):qry(k*2+1,m+1,r,i));
    }
    ll get(){return qry(1,0,n-1,pt);}
    int who(){return pt<n?e.at(pt):-1;}
    void adv(){pt++;}
}ds[N];
int main(){
    cin.tie(0)->sync_with_stdio(0);
    cin>>n>>k;
    for(int i=0;i<k;i++)cin>>a[i];
    for(int i=0;i<k;i++)cin>>b[i];
    m=0;
    for(int i=0;i<k;i++){
        int p;
        cin>>p;
        int u;
        cin>>u,u--;
        int e=-1;
        for(int j=0;j<p-1;j++){
            int c,v;
            cin>>c>>v,v--;
            if(~e)ne[e]=m;
            from[u].push_back(m),to[v].push_back(m);
            uu[m]=u,vv[m]=v,w[m]=c,id[m]=i;
            u=v,e=m++;
        }
        assert(~e);
        ne[e]=-1;
    }
    for(int i=0;i<n;i++)ds[i].init(from[i]);
    for(int i=0;i<m;i++)d[i]=INF;
    priority_queue<pair<ll,int>>pq;
    auto upd=[&](int i,ll x){
        if(d[i]>x)pq.push({-(d[i]=x),i});
    };
    auto work=[&](int v){
        while(~ds[v].who()&&done[ds[v].who()])ds[v].adv();
        if(~ds[v].who())upd(ds[v].who(),ds[v].get());
    };
    for(int i:from[0])upd(i,0);
    while(pq.size()){
        auto [x,i]=pq.top();
        pq.pop(),x*=-1;
        if(done[i])continue;
        done[i]=1;
        int u=uu[i],v=vv[i];
        ds[u].add({x,b[id[i]]});
        if(~ne[i])upd(ne[i],x+w[i]);
        work(u);
    }
    for(int i=1;i<n;i++){
        ll x=INF;
        for(int j:from[i])x=min(x,d[j]);
        for(int j:to[i])x=min(x,d[j]+w[j]);
        cout<<x<<' ';
    }
    cout<<'\n';
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 0
Wrong Answer
time: 2ms
memory: 29464kb

input:

6 3
1 5 1
5 5 1
3 1 2 2 3 3
3 5 1 2 1 4
3 3 4 5 4 6

output:

2 5 28 4000000000000000000 4000000000000000000 

result:

wrong answer 3rd numbers differ - expected: '21', found: '28'