求助关于卡常
查看原帖
求助关于卡常
756179
so_find_skind楼主2023/8/17 10:59
#include<bits/stdc++.h>
using namespace std;
int n,m,qq[1005],dis[1005],mx;
struct eg{
    int v,w;
};
vector<eg>g[1005];
bool found[1005];
inline void dijkstra(){
    memset(dis,0x3f,sizeof(dis));
    memset(found,false,sizeof(found));
    dis[1]=0;
    while(true){
        int u=-1;
        for(register int i=1;i<=n;i++){
            if(!found[i] && (u==-1 || dis[i]<dis[u]))
                u=i;
        }
        if(u==-1)
            break;
        found[u]=true;
        for(register int i=0;i<g[u].size();i++){
            int v=g[u][i].v;
            if(dis[v]>dis[u]+g[u][i].w){
                dis[v]=dis[u]+g[u][i].w;
                qq[v]=u;
            }
        }
    }
}
inline void dij(int d,int e){
    memset(dis,0x3f,sizeof(dis));
    memset(found,false,sizeof(found));
    dis[1]=0;
    while(true){
        int u=-1;
        for(register int i=1;i<=n;++i){
            if(!found[i] && (u==-1 || dis[i]<dis[u]))
                u=i;
        }
        if(u==-1)
            break;
        found[u]=true;
        for(register int i=0;i<g[u].size();++i){
            int v=g[u][i].v;
            if(!(d==u && e==v || d==v && e==u) && dis[v]>dis[u]+g[u][i].w){
                dis[v]=dis[u]+g[u][i].w;
            }
        }
    }
}
int main(){
    scanf("%d%d",&n,&m);
    for(register int i=1,u,v,w;i<=m;i++){
        scanf("%d%d%d",&u,&v,&w);;
        g[u].push_back({v,w});
        g[v].push_back({u,w});
    }
    dijkstra();
    int r=n;
    while(r!=1){
        dij(qq[r],r);
        mx=max(mx,dis[n]);
        r=qq[r];
    }
    cout<<mx;
    return 0;
}

99分,最后一个点没过

Imakf我谢谢你

2023/8/17 10:59
加载中...