求助(WA on 2,3,5,8)
查看原帖
求助(WA on 2,3,5,8)
555065
ChrysanthBlossom楼主2023/7/23 14:07
#include <bits/stdc++.h>
#define ri register int
#define ld long double
#define ll long long
using namespace std;
//12:00~
/*
每道题check的步骤:
1.maxn
2.有无mod
3.图是否联通
4.数据最大值(有无超int/ll/int128)
*/
const int maxn=5e6+5;
const int mod=1e9+7;
int n,m,k;
int cnt,head[maxn],nxt[maxn],to[maxn],bq[maxn];
struct node{
    int p;int dis;
    bool operator < (const node &x) const {
        return x.dis<dis;
    }
};
priority_queue<node>q;
int dis[maxn];
void dijkstra(int st){
    for(ri i=1;i<=n*k+n;i++)dis[i]=2147483647;
    dis[st]=0;
    q.push((node){st,0});
    while(!q.empty()){
        int u=q.top().p,d=q.top().dis;q.pop();
        if(d!=dis[u])continue;
        for(ri e=head[u];e;e=nxt[e]){
            int v=to[e],w=bq[e];
            if(dis[u]+w<dis[v]){
                dis[v]=dis[u]+w;
                q.push((node){v,dis[v]});
            }
        }
    }
}
void add(int u,int v,int w){
    ++cnt;
    to[cnt]=v;bq[cnt]=w;
    nxt[cnt]=head[u];head[u]=cnt;
    //cout<<u<<' '<<v<<endl;
}
signed main(){
    ios::sync_with_stdio(0);
    int s,t;
    cin>>n>>m>>k>>s>>t;
    //s++,t++;
    for(ri u,v,w,i=1;i<=m;i++){
        cin>>u>>v>>w;
        //u++,v++;
        for(ri j=0;j<=k;j++){add(u+j*n,v+j*n,w);add(v+j*n,u+j*n,w);}
        for(ri j=1;j<=k;j++){add(u+n*(j-1),u+n*j,0);add(u+n*(j-1),v+n*j,0);add(v+n*(j-1),u+n*j,0);}
    }
    for(int i=1;i<=k;i++){
		add(t+(i-1)*n,t+i*n,0);
	}
    //cout<<endl;
    dijkstra(s);
    //for(ri i=0;i<n*k+n;i++)cout<<i/n+1<<' '<<i%n<<' '<<dis[i]<<endl;
    cout<<dis[t+n*k];
    return 0;
}
2023/7/23 14:07
加载中...