80pts玄关求调
查看原帖
80pts玄关求调
892084
xinxin2022楼主2024/7/23 11:29
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,m,a,b;
int r[100005],total;
int r2,r3;
bool v[100005];
int dis[100005],head[100005];
struct node{
    int fr,to,val;
}e[200005];
void spfa(){
    queue<int> q;
    q.push(a);
    while(!q.empty()){
        int rp=q.front();
        q.pop();
        v[rp]=false;
        for(int i=head[rp];i;i=e[i].fr){
            r3=e[i].to;
            if(dis[rp]+e[i].val<dis[r3]){
                dis[r3]=dis[rp]+e[i].val;
                if(!v[r3]){
                    q.push(r3);
                    v[r3]=true;
                }
            }
        }
    }
}
signed main(){
    cin>>n>>m;
    cin>>a>>b;
    for(int i=0;i<n;++i) cin>>r[i];
    for(int i=1;i<=m;i++){
        scanf("%d%d",&r2,&r3);
        e[++total].fr=head[r2];
        e[total].to=r3;
        e[total].val=r[r3]-r[r2]+1;
        head[r2]=total;
    }
    for(int i=1;i<=n;i++) dis[i]=INT_MAX-1;
    dis[a]=0;
    spfa();
    if(dis[b]==INT_MAX-1) cout<<"No solution";
    else cout<<dis[b];
    return 0;
}
2024/7/23 11:29
加载中...