珂爱萌新求条接近 AC。
查看原帖
珂爱萌新求条接近 AC。
766675
da_ke楼主2024/10/9 23:02
#include <bits/stdc++.h>

#define i64 long long
#define rep(i,l,r) for(int i=(l);i<=(r);i++)
#define fdn(i,r,l) for(int i=(r);i>=(l);i--)
#define pii pair<int,int>
using namespace std;

typedef long long ll;
typedef double db;
typedef __int128 i128;

std::mt19937 rnd(std::chrono::steady_clock::now().time_since_epoch().count());
std::mt19937_64 rnd64(std::chrono::steady_clock::now().time_since_epoch().count());

const int N=101;
const ll INF=1ll<<59;

struct Node
{
    int first,second,third;
    ll fourth;
    bool operator < (const Node& A) const 
    {
        return fourth>A.fourth;
    }
    bool operator > (const Node& A) const 
    {
        return fourth<A.fourth;
    }
};

struct Edge
{
    int first;ll second,third;
};

int n,m,K,G;
ll dis[N][N][N];
bool vis[N][N][N];
vector<Edge> linker[N];
priority_queue<Node> qu;

void update(int u,int s,int t,ll w)
{
    if(dis[u][s][t]>w)
    {
        dis[u][s][t]=w;
        qu.push({u,s,t,w});
    }
}

int main()
{
#ifndef ONLINE_JUDGE
    freopen("in.in","r",stdin);
    freopen("out.out","w",stdout);
#endif
    ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);
    cin>>n>>m>>K>>G;
    vector<ll> x(n+1),y(n+1),z(n+1);
    rep(i,1,n) cin>>x[i]>>y[i]>>z[i];
    rep(i,1,m)
    {
        int u,v;ll p,q;
        cin>>u>>v>>p>>q;
        linker[u].push_back({v,p,q});
        linker[v].push_back({u,p,q});
    }
    rep(i,1,n) rep(j,0,K) rep(k,0,G) dis[i][j][k]=INF;
    dis[1][0][0]=0;
    qu.push({1,0,0,0ll});
    while(!qu.empty())
    {
        int u=qu.top().first,s=qu.top().second,t=qu.top().third;
        ll l=qu.top().fourth%(x[u]+y[u]+z[u]),d=qu.top().fourth,r=x[u]+y[u]+z[u];
        qu.pop();
        if(u==n)
        {
            cout<<d<<endl;
            return 0;
        }
        if(vis[u][s][t]) continue;
        vis[u][s][t]=1;
        for(auto i:linker[u])
        {
            int v=i.first,p=i.second,q=i.third;
            // 按红绿灯讨论
            if(l<x[u])
            {
                /*不限速*/ update(v,s,t,d+p);
                /*限速*/ if(s<K) update(v,s+1,t,d+q);
            }
            else if(l<(x[u]+y[u]))
            {
                // 不闯黄灯
                    /*不限速*/ update(v,s,t,d+r-l+p);
                    /*限速*/ if(s<K) update(v,s+1,t,d+r-l+q);
                // 闯黄灯
                if(t<G)
                {
                    update(v,s,t+1,d+p);
                    if(s<K) update(v,s+1,t+1,d+q);
                }
            }
            else
            {
                update(v,s,t,d+r-l+p);
                if(s<K) update(v,s+1,t,d+r-l+q);
            }
        }
    }
    return 0;
}

真服了,大佬们帮我解决 ub 以后,WA×9\text{\color{red}{WA}}\times 9

数据非常非常非常非常水,我两个样例都没过过了一堆数据,应该说是大部分。

瞪了好长时间,都要玉玉了,求助。

2024/10/9 23:02
加载中...