疑似全网最诡异代码
查看原帖
疑似全网最诡异代码
735763
_ChongYun_楼主2025/1/20 15:59

在VScode上跑出RE,洛谷IDE上能输出。

/* ChongYun */
#include<bits/stdc++.h>
#define int long long
using namespace std;
int read(){
    int x=0,f=1;
    char ch=getchar();
    while(ch<'0'||ch>'9'){
        if(ch=='-') f=-1;
        ch=getchar();
    }
    while(ch>='0'&&ch<='9'){
        x=(x<<1)+(x<<3)+ch-'0';
        ch=getchar();
    }
    return x*f;
}
const int inf=1e12;
int n,m;
int u[100005],v[100005];
struct graph{
    struct Edge{
        int to,nxt,val;
    }w[200005];
    
    int hd[100005],ecnt=0;
    void Link(int x,int y,int val){
        ++ecnt;
        w[ecnt].to=y;
        w[ecnt].nxt=hd[x];
        w[ecnt].val=val;
        hd[x]=ecnt;
        return ;
    }
}G1,G2,G3;
int flg[100005],vi[100005],lst[100005];
int dis[100005],vis[100005];
priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > > q;
void dijkstra(graph G){
    for(int i=1;i<=n;i++) lst[i]=0;
    for(int i=1;i<=n;i++) vis[i]=0;
    for(int i=1;i<=n;i++) dis[i]=inf;
    dis[1]=0; q.push({0,1});
    while(!q.empty()){
        int x=q.top().second;
        q.pop();
        if(vis[x]) continue;
        vis[x]=1;
        for(int i=G.hd[x];i!=0;i=G.w[i].nxt){
            int y=G.w[i].to;
            if(dis[y]>dis[x]+G.w[i].val){
                dis[y]=dis[x]+G.w[i].val;
                lst[y]=x;
                if(!vis[y]) q.push({dis[y],y});
            }
        }
    }
    return ;
}
signed main(){
    n=read(); m=read();
    for(int i=1;i<=m;i++){
        int val1,val2;
        u[i]=read(); v[i]=read();
        val1=read(); val2=read();
        G1.Link(u[i],v[i],val1),G1.Link(v[i],u[i],val1);
        G2.Link(u[i],v[i],val2),G2.Link(v[i],u[i],val2);
    }
    dijkstra(G1);
    int now=n; flg[1]=flg[n]=1;
    while(now){
        flg[now]=1;
        now=lst[now];
    }
    for(int i=1;i<=m;i++){
        if(flg[u[i]]&&flg[v[i]]) ++vi[i];
    }
    for(int i=1;i<=n;i++) flg[i]=0;
    dijkstra(G2);
    now=n; flg[1]=flg[n]=1;
    while(now){
        flg[now]=1;
        now=lst[now];
    }
    for(int i=1;i<=m;i++){
        if(flg[u[i]]&&flg[v[i]]) ++vi[i];
    }
    for(int i=1;i<=m;i++){
        G3.Link(u[i],v[i],vi[i]);
        G3.Link(v[i],u[i],vi[i]);
    }
    dijkstra(G3);
    printf("%lld\n",dis[n]);
    return 0;
}
2025/1/20 15:59
加载中...