同余最短路模板求助
  • 板块学术版
  • 楼主___A__
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/8/5 22:12
  • 上次更新2024/8/6 08:28:21
查看原帖
同余最短路模板求助
275860
___A__楼主2024/8/5 22:12

P3403 跳楼机

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e5+5;
int n,x,y,z,dis[N],vis[N];
vector<pair<int,int>>g[N];
void bfs(int s){
    priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>>q;
    q.push({1,1%x});
    while(!q.empty()){
        auto [A,B]=q.top();
        q.pop();
        if(!vis[B]){
            vis[B]=1,dis[B]=A;
            for(auto [u,w]:g[B]){
                if(!vis[u]){
                    q.push({A+w,u});
                }
            }
        }
    }
}
signed main(){
    cin>>n>>x>>y>>z;
    for(int i=0;i<x;i++){
        g[i].push_back({(i+y)%x,y}),g[i].push_back({(i+z)%x,z});
    }
    bfs(0);
    int ans=0;
    for(int i=0;i<x;i++){
        if(n>=dis[i]){
            ans+=(n-dis[i])/x+1;
        }
    }
    cout<<ans;
}
2024/8/5 22:12
加载中...