谁能极限优化一下
  • 板块灌水区
  • 楼主LucasShenZG
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/10/7 11:57
  • 上次更新2024/10/7 14:37:18
查看原帖
谁能极限优化一下
565413
LucasShenZG楼主2024/10/7 11:57

rt,p1119虽然用floyd过了但还是想看看这代码能不能剪枝过:

#include<bits/stdc++.h>
#pragma GCC opttimes(0)
using namespace std;
struct edge{
	int v,w;
};
struct node{
	int dis,u;
	bool operator>(const node& a)const{
		return dis>a.dis;
	}
};
vector<edge>a[10005];
int dis[10005];
int t[10005];
bool vis[10005];
priority_queue<node,vector<node>,greater<node>>q;
int n,m,s;
int dijsktra(int x,int y,int tt){
	memset(dis,0x3f3f,sizeof(dis));
	memset(vis,0,sizeof(vis));
	q.push({0,x});
	dis[x]=0;
	while(!q.empty()){
		int u=q.top().u;
		q.pop();
		if(vis[u]||t[u]>tt)continue;
		vis[u]=1;
		for(auto ed:a[u]){
			int v=ed.v,w=ed.w;
			if((dis[v]>dis[u]+w)&&t[v]<=tt&&t[u]<=tt){
				dis[v]=dis[u]+w;
				q.push({dis[v],v});
			}
		}
	}
	if(dis[y]>=0x3f3f)return -1;
	else return dis[y];
}
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>t[i];
	}
	for(int i=1;i<=m;i++){
		int u,v,w;
		cin>>u>>v>>w;
		u++,v++;
		a[u].push_back({v,w});
		a[v].push_back({u,w});
	}
	int qq;
	cin>>qq;
	for(int i=1;i<=qq;i++){
		int x,y,tt;
		cin>>x>>y>>tt;
		x++,y++;
		cout<<dijsktra(x,y,tt);
	}
	return 0;
}
2024/10/7 11:57
加载中...