这题很有意思最短路而已
2026-08-07 14:42:23
发布于:浙江
13阅读
0回复
0点赞
总体思路:用dis[u]+w<dis[v]的思路优化一些本来的广搜即可
#include<bits/stdc++.h>
using namespace std;
long long mod;
long long s,t;
long long a,b,c;
long long w[3000004];
long long vis[3000005];
int main(){
memset(vis,0x3f,sizeof vis);
cin>>mod>>s>>t>>a>>b>>c;
cin>>w[1]>>w[2]>>w[3];
queue<long long>q;
q.push(s);
vis[s]=0;
while(q.size()){
long long now=q.front();
q.pop();
long long x=(now+a)%mod;
if(vis[now]+w[1]<vis[x]){
q.push(x);
vis[x]=vis[now]+w[1];
}
x=(now-b+mod)%mod;
if(vis[now]+w[2]<vis[x]){
q.push(x);
vis[x]=vis[now]+w[2];
}
x=now*c%mod;
if(vis[now]+w[3]<vis[x]){
q.push(x);
vis[x]=vis[now]+w[3];
}
}
if(vis[t]<1e15){
cout<<vis[t];
}else{
cout<<-1;
}
return 0;
}
全部评论 1
飞飞你好厉害啊!
1周前 来自 上海
0哎呀~
1周前 来自 浙江
0










有帮助,赞一个