Submission #1363749

#TimeUsernameProblemLanguageResultExecution timeMemory
1363749huangallenTrain (APIO24_train)C++20
5 / 100
82 ms168556 KiB
#ifdef LOCAL
#include "stub.cpp"
#endif
#include "train.h"

#include<bits/stdc++.h>
using namespace std;
// #pragma GCC optimize("O3,unroll-loops")
// #pragma GCC target("avx2,sse4,bmi2,popcnt")
#define int long long
#define iint signed
#define REP(i,n) for(int i=0;i<(n);i++)
#define REP1(i,n) for(int i=1;i<=(n);i++)
#define RREP(i,n) for(int i=(n)-1;i>=0;i--)
#define RREP1(i,n) for(int i=(n);i>=1;i--)
#define f first
#define s second
#define pb push_back
#define ALL(x) (x).begin(),(x).end()
#define SZ(x) ((int)((x).size()))
#define SQ(x) ((x)*(x))
#define pii pair<int,int>
#define pipii pair<int,pii>
#define ppi pair<pii,int>
#define Graph vector<vector<int>>
#define Graphw vector<vector<pii>>
#define IOS() ios::sync_with_stdio(0),cin.tie(0)
#define md(x) (((x)%(mod)+(mod))%(mod))
#define MD(x,M) (((x)%(M)+(M))%(M))
#define ld long double
#define pdd pair<ld,ld>
template<typename S> void chmin(S &x,S y) { x=min(x,y); }
template<typename S> void chmax(S &x,S y) { x=max(x,y); }
#define addmod(x,y) x=((x+(y))%mod)
#define Vi vector<int>
#define Vpii vector<pii>
#ifdef LOCAL
#define op(x) cout<<(#x)<<"="<<(x)<<", ";
#define ope(x) cout<<(#x)<<"="<<(x)<<endl;
#define oparr(x) {cout<<(#x)<<":";for(auto allen:(x)) cout<<allen<<" ";cout<<" size="<<(x).size()<<endl;}
#define entr cout<<endl;
#else
#define op(x) ;
#define ope(x) ;
#define oparr(x) ;
#define entr ;
#endif
template<typename T1,typename T2>
ostream& operator<<(ostream& os,pair<T1,T2> p) { return os<<'{'<<p.f<<','<<p.s<<'}'; }
template<typename T1,typename T2>
istream& operator>>(istream& os,pair<T1,T2> &p) { return os>>p.f>>p.s; }
template<typename S>
ostream& operator<<(ostream& os,vector<S> p) { for(auto allen:p) os<<allen<<' ';return os<<'\n'; }
template<typename S>
istream& operator>>(istream& os,vector<S> &p) { for(auto &allen:p) os>>allen;return os; }
template<typename T1,typename T2>
pair<T1,T2> operator+(pair<T1,T2> p1,pair<T1,T2> p2) { return pair<T1,T2>(p1.f+p2.f,p1.s+p2.s); }
const int mod=998244353;
const int maxn=1e5+5;
const int maxv=1e6+5;
const int inf=1ll<<60;
// mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
// int rd(int l,int r) {
//     return uniform_int_distribution<int>(l,r)(rng);
// }

long long solve(iint N, iint M, iint W, std::vector<iint> T, std::vector<iint> X, std::vector<iint> Y,
                std::vector<iint> A, std::vector<iint> B, std::vector<iint> C, std::vector<iint> L,
                std::vector<iint> R) {
    ;
    int n=N,m=M,w=W;
    Vi t(n);
    Vi l(w),r(w);
    REP(i,w) l[i]=L[i],r[i]=R[i];
    REP(i,n) t[i]=T[i];
    struct E {
        int u,v,a,b,c;
    };
    vector<vector<E>> g(n);
    REP(i,m) {
        g[X[i]].pb({X[i],Y[i],A[i],B[i],C[i]});
    }
    REP(i,n) sort(ALL(g[i]),[&](E a,E b) {return a.a>b.a;});
    Vi it(n);
    // int an=inf;
    #define pip pair<int,pii>
    priority_queue<pip,vector<pip>,greater<pip>> pq;
    int V=1000+5;
    vector<Vi> dis(n,Vi(V,inf));
    vector<Vi> vis(n,Vi(V));
    dis[0][0]=0;
    pq.push({0,{0,0}});
    while(SZ(pq)) {
        auto [__,_]=pq.top();
        auto [u,ti]=_;
        pq.pop();
        if(vis[u][ti]) continue;
        vis[u][ti]=1;
        for(auto x:g[u]) if(x.a>=ti){
            int calw=x.c;
            REP(i,w) if(ti<l[i]&&r[i]<x.a) calw+=t[u];
            op(u)op(x.v)ope(calw)
            if(dis[x.v][x.b]>dis[u][ti]+calw) {
                dis[x.v][x.b]=dis[u][ti]+calw;
                pq.push({dis[x.v][x.b],{x.v,x.b}});
            }
            it[u]++;
        }
    }
    int an=inf;
    REP(i,V) {
        int tt=dis[n-1][i];
        REP(j,w) if(l[j]>i) tt+=t[n-1];
        chmin(an,tt);
    }
    // oparr(dis[n-1])
	return an==inf?-1:an;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...