奇怪的错误
查看原帖
奇怪的错误
540956
douweiqi楼主2023/11/18 21:59

有错误但是找不出来,整体代码思路没问题

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
const int N=1e6+10;
const int M=1e4+10;
const int Small=1e-8;
int n,m,k;
struct Node{
	int to;
	int next;
	int a;
}e[N];
int head[N];
int pd[M][M];
long long dp[M][M];

void dij(){
	for(int i=0;i<=n;i++){
		for(int kk=0;kk<=k;kk++){
			dp[i][kk]=0x7fffffff;
		}
	}
	int minn;
	int minj=1;
	dp[1][0]=0;
	int K=0;
	pd[minj][K]=true;
	for(int i=1;i<=n;i++){
		for(int j=head[minj];j;j=e[j].next){
			if(dp[minj][K]>=e[j].a){
				dp[e[j].to][(K+1)%k]=min(dp[e[j].to][(K+1)%k],dp[minj][K]+1);
			}else{
				int kkk=ceil((e[j].a-dp[minj][K])/(k+0.0)); 
				dp[e[j].to][(K+1)%k]=min(dp[e[j].to][(K+1)%k],dp[minj][K]+kkk*k+1);
			}
		}
		minn=0x7fffffff;
		pd[minj][K]=true;
		for(int j=1;j<=n;j++){
			for(int kk=0;kk<k;kk++){
				if(!pd[j][kk]){
					if(dp[j][kk]<minn){
						minn=dp[j][kk];
						K=kk;
						minj=j;
					}
				}
			}
		}
	}
}
int main(){
	cin>>n>>m>>k;
	int cnt=0;
	for(int i=1;i<=m;i++){
		int u,v,a;
		cin>>u>>v>>a;
		e[++cnt].next=head[u];
		head[u]=cnt;
		e[cnt].to=v;
		e[cnt].a=a; 
	}
	dij();
	if(dp[n][0]!=0x7fffffff) cout<<-1;
    else cout<<dp[n][0];
	return 0; 
}
2023/11/18 21:59
加载中...