TLE on test 17 求卡常
查看原帖
TLE on test 17 求卡常
814130
Moya_Rao啾?啾!楼主2025/6/20 15:27

RT.

时间复杂度 O((n+m)logm)O((n+m)\log{m}) 没有问题呀,整个不就是在跑 Dijkstra 吗。为什么要让我超时,呜呜。

就是得卡常吧?我不怎么会卡常,所以发个帖问一下各位巨佬。

提交记录在这里

代码(虽然提交记录里看得到但还是贴一下吧):

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+5;
struct node{int id;long long tim;};
struct line{int to;long long bus,walk;};
bool operator < (const node &A, const node &B){return A.tim>B.tim;}
vector<line> g[N];priority_queue<node> q;
int T,n,m;long long t0,t1,t2,l,r,ans,dis[N];
long long read(){
    long long su=0,pp=1;char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')pp=-1;ch=getchar();}
    while(ch>='0'&&ch<='9'){su=su*10+ch-'0';ch=getchar();}
    return su*pp;
}
int main(){
    T=read();
    while(T--){
        n=read(),m=read(),t0=read(),t1=read(),t2=read();l=0,r=t0,ans=-1;
        for(int i=1;i<=n;i++)g[i].clear(),dis[i]=-1;dis[n]=t0;
        for(int i=1;i<=m;i++){
            int x=read(),y=read(),k1=read(),k2=read();
            g[x].push_back({y,k1,k2}),g[y].push_back({x,k1,k2});
        }
        while(!q.empty())q.pop();q.push({n,t0});
        while(!q.empty()){
            auto [u,t]=q.top();q.pop();
            for(auto [v,b,w]:g[u]){
                if(t<=t1||t-b>=t2){
                    if(dis[v]>=t-b)continue;
                    dis[v]=t-b;q.push({v,dis[v]});
                }
                else{
                    long long NewDis=(t-w>t1-b?t-w:t1-b);
                    if(dis[v]>=NewDis)continue;
                    dis[v]=NewDis;q.push({v,dis[v]});
                }
            }
        }
        cout<<dis[1]<<"\n";
    }
    return 0;
}

麻烦在本帖下回复并 at 我 / 私信,谢谢喵!

2025/6/20 15:27
加载中...