CSP-J T4 TLE #16 #17 #18 #20
  • 板块学术版
  • 楼主CaiZi
  • 当前回复2
  • 已保存回复2
  • 发布时间2023/10/26 18:00
  • 上次更新2023/10/26 19:58:45
查看原帖
CSP-J T4 TLE #16 #17 #18 #20
728853
CaiZi楼主2023/10/26 18:00

如题,算法为优先队列优化的dijkstra,按理来说复杂度没有问题,求调。输入输出和memset均替换过,也不行。

#include<bits/stdc++.h>
using namespace std;
struct sb{
	int v,w;
	friend bool operator<(sb x,sb y){
		return x.v>y.v;
	}
};
int n,m,k,a,b,c,dp[11451][114],u,t,d,l;
vector<sb>s[11451];
priority_queue<sb>q;
sb p;
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin>>n>>m>>k;
	for(int i=1;i<=n;i++){
		for(int j=0;j<k;j++){
			dp[i][j]=0x3f3f3f3f;
		}
	}
	dp[1][0]=0;
	for(int i=1;i<=m;i++){
		cin>>a>>b>>c;
		s[a].push_back(sb{b,c});
	}
	q.push(sb{1,0});
	while(!q.empty()){
		u=q.top().v;
		t=q.top().w;
		q.pop();
		for(int i=0;i<s[u].size();i++){
			p=s[u][i];
			d=ceil(1.0*(max(p.w,t)-t)/k)*k+t+1;
			if(d<=dp[p.v][d%k]){
				dp[p.v][d%k]=d;
				q.push(sb{p.v,d});
			}
		}
	}
	if(dp[n][0]==0x3f3f3f3f){
		cout<<-1;
	}
	else{
		cout<<dp[n][0];
	}
	return 0;
}
2023/10/26 18:00
加载中...