死循环求助
查看原帖
死循环求助
529458
Butterfly___qwq楼主2023/4/4 20:24
#include<bits/stdc++.h>
using namespace std;
const int M=100002;
const long long inf=0x3f3f3f3f;
long long n,m,s;
long long cnt,head[M];
long long dis[M];
struct egde{
    long long to,nxt,w;
}e[M];
bool vis[M];
typedef pair<long long,long long> pir;
priority_queue<pir,vector<pir>,greater<pir> >q;
void add(long long u,long long v,long long w){
    e[++cnt].w=w;
    e[cnt].to=v;
    e[cnt].nxt=head[u];
    head[u]=cnt;
}
void dij(){
    memset(dis,0x3f,sizeof(dis));
    dis[1]=1;
    q.push(pir(1,1));
    while(!q.empty()){
        long long f = q.top().first,u = q.top().second; 
        q.pop();
        if(vis[u])continue;
        vis[u]=1;
        for(long long i=head[u];i;i=e[i].nxt){
            long long v=e[i].to,w=e[i].w;
            if(dis[v]>dis[u]+w){
                dis[v]=dis[u]+w;
                q.push(pir(dis[v],v));
            }
        }
    }
}
signed main(){
	memset(head,-1,sizeof(head));
	long long x,y,z,ans=0;
    cin>>n>>x>>y>>z;
    if(x==1||y==1||z==1)
	{
		cout<<n;
		return 0;
	}
    for(long long i=0;i<z;i++){
        add(i,(i+x)%z,x);
    	add(i,(i+y)%z,y);
    }
    dij();
    for(long long i=0;i<z;i++)if(n>=dis[i])ans+=(n-dis[i])/z+1;
    cout<<ans;
    return 0;
}
2023/4/4 20:24
加载中...