80分,求助!!!
查看原帖
80分,求助!!!
957205
Frommyvalleyuphard楼主2025/1/1 10:03
#include<bits/stdc++.h>
#include<vector>
using namespace std;
long long d[20000][3],e[10000][100],ex[1000000][2],e1=0,e2=1;
struct two{
	long long k,l;
};
vector<two> f[10000];
int main(){
	long long a,b,c,o=0,p=0;
	cin>>a>>b>>c;
	for(long long x=0;x<b;x++){
		cin>>d[x][0]>>d[x][1]>>d[x][2];
		d[x][0]--;
		d[x][1]--;
		two y;
		y.k=d[x][1],y.l=d[x][2];
		f[d[x][0]].push_back(y);
	}
	for(long long x=0;x<a;x++){
		for(long long y=0;y<c;y++){
			e[x][y]=1000000000;
		}
	}
	e[0][0]=0,ex[0][0]=ex[0][1]=0;
	while(e1<e2 && e[a-1][0]==1000000000){
		long long j=ex[e1][0],z=ex[e1][1]%c;
		for(long long y=0;y<f[j].size();y++){
				p=e[f[j][y].k][(z+1)%c];
				if(f[j][y].l>e[j][z]){
					e[f[j][y].k][(z+1)%c]=min(e[f[j][y].k][(z+1)%c],(long long)ceil((f[j][y].l-e[j][z])*1.0/c)*c+e[j][z]+1);
					o=(long long)ceil((f[j][y].l-e[j][z])*1.0/c)*c+e[j][z]+1;
				}else if(e[j][z]<1000000000){
					e[f[j][y].k][(z+1)%c]=min(e[f[j][y].k][(z+1)%c],e[j][z]+1);
					o=e[j][z]+1;
				}
				if(o<p){
					ex[e2][0]=f[j][y].k,ex[e2][1]=o,e2++;
				}
		}
		e1++;
	}
	for(long long x=0;x<a;x++){
		for(long long y=0;y<c;y++){
			if(e[x][y]==1000000000){
				cout<<"?";
			}else{
				cout<<e[x][y];
			}
		}
		cout<<endl;
	}
	if(e[a-1][0]==1000000000){
		cout<<-1;
	}else{
		cout<<e[a-1][0];
	}
}

错了#8~10,#19,#22

2025/1/1 10:03
加载中...