求助cspjT4
  • 板块学术版
  • 楼主youakioi
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/10/25 11:23
  • 上次更新2023/11/2 11:29:32
查看原帖
求助cspjT4
696748
youakioi楼主2023/10/25 11:23

求调,wa第8,9,10

#include<bits/stdc++.h>
#define ll long long
#define int long long
#define endl '\n'
using namespace std;
const int N=1e4+10,K=105;
struct Node{
	int to,w;
};
struct node{
	int u,t;
};
int n,m,k,dis[N][K],vis[N][K];
vector<Node> g[N];
queue<node> q;
int cal(int x,int y){
	if(x>=y) return x;
	else return x+ceil(1.0*(y-x)/k)*k; 
}
void spfa(){
//	cout<<endl;
	for(int i=1;i<=n;i++){
		for(int j=0;j<k;j++) dis[i][j]=1e18;
	}
	dis[1][0]=0,q.push({1,0}),vis[1][0]=1;
	while(!q.empty()){
		int u=q.front().u,t=q.front().t;
		q.pop();
//		cout<<u<<' '<<t<<' '<<dis[u][t]<<endl;
		vis[u][t]=0;
		for(int i=0;i<g[u].size();i++){
			int v=g[u][i].to,w=g[u][i].w;
			if(cal(dis[u][t]+1,w)<dis[v][(t+1)%k]){
				dis[v][(t+1)%k]=cal(dis[u][t]+1,w);
				if(!vis[v][(t+1)%k]) vis[v][(t+1)%k]=1,q.push({v,(t+1)%k});
			}
		} 
	}
	if(dis[n][0]==1e18) cout<<-1<<endl;
	else cout<<dis[n][0]<<endl; 
}
signed main(){
	//freopen("","r",stdin);
	//freopen("","w",stdout);
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>n>>m>>k;
	for(int i=1;i<=m;i++){
		int u,v,w;
		cin>>u>>v>>w;
		g[u].push_back({v,w});
	}
	spfa();
	return 0;
}


2023/10/25 11:23
加载中...