社区讨论
蒟蒻初学同余最短路,dijkstra求调
P3403跳楼机参与者 2已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @lo15yacl
- 此快照首次捕获于
- 2023/10/22 15:44 2 年前
- 此快照最后确认于
- 2023/11/02 15:19 2 年前
rt,后来重写了一个spfa过了,但这个dijkstra为什么不对...
CPP#include <bits/stdc++.h>
#define in inline
#define rint register int
#define r(a) runtimerror(a)
#define w(a) wronganswer(a)
#define wl(a) wronganswer(a);putchar('\n')
#define ws(a) wronganswer(a);putchar(' ')
using namespace std;
typedef long long ll;
int tot,head[100010];
ll x,y,z,ans,h,cost[100010];
bool vis[100010];
template <typename t> void wronganswer(t a){
if(a<0) putchar('-'),a=-a;
if(a>9) wronganswer(a/10);
putchar(a%10^48);
}
template <typename t> in void runtimerror(t &a){
char ch=getchar();
t x=1,f=0;
while(!isdigit(ch)){
if(ch=='-') x=-1;
ch=getchar();
}
while(isdigit(ch)){
f=(f<<3)+(f<<1)+(ch^48);
ch=getchar();
}
a=x*f;
}
struct Edge{
int to,nex,cost;
}edge[200010];
in void add_edge(int from,int to,int cost){
edge[++tot]={to,head[from],cost};
head[from]=tot;
}
in void dijkstra(){
q.push({1,1});
memset(cost,0x3f,sizeof(cost));
cost[1]=1;
while(!q.empty()){
a=q.top();
q.pop();
if(vis[a.id]) continue;
vis[a.id]=true;
for(rint i=head[a.id];i;i=edge[i].nex){
if(cost[edge[i].to]>a.cost+edge[i].cost){
cost[edge[i].to]=a.cost+edge[i].cost;
q.push({edge[i].to,cost[edge[i].to]});
}
}
}
}
int main(){
r(h),r(x),r(y),r(z);
if(x==1||y==1||z==1){
w(h);
return 0;
}
for(rint i=0;i<x;i++){
add_edge(i,(i+y)%x,y);
add_edge(i,(i+z)%x,z);
}
dijkstra();
for(rint i=0;i<x;i++){
if(h>=cost[i]) ans+=(h-cost[i])/x+1;
}
w(ans);
return 0;
}
回复
共 2 条回复,欢迎继续交流。
正在加载回复...