同余最短路板子求助
  • 板块学术版
  • 楼主___A__
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/8/6 14:41
  • 上次更新2024/8/6 15:13:02
查看原帖
同余最短路板子求助
275860
___A__楼主2024/8/6 14:41

P2662

#include<bits/stdc++.h>
using namespace std;
const int N=3e3+5;
int n,m,a[N],dis[N],vis[N];
void dij(){
    priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>>q;
    q.push({0,0});
    while(!q.empty()){
        auto [A,B]=q.top();
        q.pop();
        if(!vis[B]){
            vis[B]=1,dis[B]=A;
            for(int i=1;i<=n;i++){
                for(int j=0;j<=m;j++){
                    if(a[i]-j==1){
                        cout<<-1;
                        exit(0);
                    }
                    if(a[i]-j>0){
                        if(!vis[(B+a[i]-j)%a[1]]){
                            q.push({A+a[i]-j,(B+a[i]-j)%a[1]});
                        }
                    }
                }
            }
        }
    }
}
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    dij();
    int ans=0;
    for(int i=0;i<a[1];i++){
        if(!vis[i]){
            cout<<-1;
            return 0;
        }
        ans=max(ans,dis[i]-a[1]);
    }
    cout<<ans;
}
2024/8/6 14:41
加载中...