萌新用dijkstraTLE了4点求助,玄关
  • 板块P1119 灾后重建
  • 楼主sounds
  • 当前回复5
  • 已保存回复6
  • 发布时间2024/8/12 22:42
  • 上次更新2024/8/13 08:48:08
查看原帖
萌新用dijkstraTLE了4点求助,玄关
677074
sounds楼主2024/8/12 22:42

评测记录

代码:

#include<bits/stdc++.h>
#define int long long
#define dis first
#define pos second
using namespace std;
map<int,int> mp;
int n,m,x,y,z,k,dis[205];
struct node{
	int to,dis;
};
vector<node> v[205];
bool b,vis[205];
priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > > q;
void dijkstra(int x,int t){
	memset(vis,0,sizeof(vis));
	memset(dis,0x3f,sizeof(dis));
	dis[x]=0;
	q.push({0,x});
	while(!q.empty()){
		int d=q.top().dis,p=q.top().pos;
		q.pop();
		if(vis[p]) continue;
		vis[p]=1;
		for(int i=0;i<v[p].size();++i){
			int a=v[p][i].to,b=v[p][i].dis;
			if(d+b<dis[a]&&mp[p]<=t&&mp[a]<=t){
				dis[a]=d+b;
				q.push({dis[a],a});
			}
		}
	}
}
signed main(){
	cin>>n>>m;
	for(int i=0;i<n;++i){
		cin>>x;
		mp[i]=x;
	}
	for(int i=1;i<=m;++i){
		cin>>x>>y>>z;
		v[x].push_back({y,z});
		v[y].push_back({x,z});
	}
	cin>>k;
	for(int i=1;i<=k;++i){
		b=0,cin>>x>>y>>z;
		if(mp[x]>z||mp[y]>z) b=1;
		else{
			dijkstra(x,z);
			if(!vis[y]) b=1;
		}
		if(b==1) cout<<-1<<'\n';
		else cout<<dis[y]<<'\n';
	}
	return 0;
}

码风太丑,轻喷

2024/8/12 22:42
加载中...