RE 样例没过
查看原帖
RE 样例没过
1231078
bxzhujh楼主2024/9/13 12:43
#include<bits/stdc++.h>
using namespace std;
struct node{
	int x,z;
	node(int x,int z):x(x),z(z){} 
};
priority_queue<pair<int,int> > q;
vector < node > g[10100];
int n,m,k,a,b,c,f[10100][110],vis[10100][110];
int main(){
	cin>>n>>m>>k;
	memset(f,0x3f,sizeof(f));
	for(int i=1;i<=m;i++){
		cin>>a>>b>>c;
		g[a].push_back(node(b,c)); 
	}
    f[1][0]=0; 
//    vis[1][0]=1;
    q.push(make_pair(0,1)); 
    while(!q.empty()){
    	int h=q.top().second,u=abs(q.top().first);
    	q.pop();
    	
    	if(vis[h][u%k]==1) continue;
    	vis[h][u%k]=1;
    	int j=u%k;
    	cout<<g[h].size();
    	for(int i=0;i<g[h].size();i++){
    		cout<<i<<endl;
    		int v=g[u][i].x,w=g[u][i].z;//<-- 
    		cout<<i<<endl;
//    		int j=u%k;
    	    if(u>=w){
//    	    	if(vis[v][(j+1)%k]==1) continue;
    	    	if(f[h][j]+1<f[v][(j+1)%k]){
    	    		f[v][(j+1)%k]=f[h][j]+1;
//    	    		vis[v][(u+1)%k]=1; 
                    cout<<":::";
    	    		q.push(make_pair(-f[v][(j+1)%k],v));
				}
			}
			else{
				int d=ceil((w-f[h][j])*1.0/k);
//				if(vis[v][(j+1)%k]==1) continue;
				if(f[h][j]+d*k+1<f[v][(j+1)%k]){
					f[v][(j+1)%k]=f[h][j]+d*k+1;
					cout<<";;;";
//					vis[v][(u+1)%k]=1;
					q.push(make_pair(-f[v][(j+1)%k],v));
				}
			}
		}cout<<h<<' '<<u<<'\n';cout<<q.size()<<endl;
	}
	if(f[n][0]==0x3f3f3f3f) cout<<-1;
	else cout<<f[n][0];
}
2024/9/13 12:43
加载中...