求助,7~10TLE
  • 板块P4880 抓住czx
  • 楼主SNRJ
  • 当前回复1
  • 已保存回复1
  • 发布时间2022/8/12 10:25
  • 上次更新2023/10/27 15:49:51
查看原帖
求助,7~10TLE
540018
SNRJ楼主2022/8/12 10:25
#include <bits/stdc++.h>
using namespace std;
const int MAXN=1e5+10,INF=0x3f3f3f3f;
int head[5*MAXN],net[5*MAXN],to[5*MAXN],e[5*MAXN],tot;
int dist[5*MAXN];
priority_queue< pair<int,int> >q;
int n,m,b,f,u,v,w,r;
int res=INF;
bool vis[5*MAXN];
struct node{
	int t1,t2;
}t[5*MAXN];
inline bool cmp(node x,node y){
	return x.t1<y.t1;
}
void link(int x,int y,int z){
	to[++tot]=y; e[tot]=z; net[tot]=head[x]; head[x]=tot;
	to[++tot]=x; e[tot]=z; net[tot]=head[y]; head[y]=tot;
} 
inline void dijkstra(){
	while(q.size()){
		int k=q.top().second;
		q.pop();
		if(vis[k]) {continue;}
		vis[k]=true;
		for(int i=head[k];i;i=net[i]){
			int l=to[i];
			if(!vis[l]&&dist[k]+e[i]<dist[l]){
				dist[l]=dist[k]+e[i];
				q.push(make_pair(-dist[l],l));
			}
		}
	}
}
int main(){
	scanf("%d%d%d%d",&n,&m,&b,&f);
	for(int i=1;i<=n;i++){dist[i]=INF;}
	for(int i=1;i<=m;i++){e[i]=INF;}
	dist[b]=0;
	q.push(make_pair(0,b));
	for(int i=1;i<=m;i++){
		scanf("%d%d%d",&u,&v,&w);
		link(u,v,w);
	}
	scanf("%d",&r);
	dijkstra();
	if(r==0){printf("%d\n",dist[f]);}
	for(int i=1;i<=r;i++){scanf("%d%d",&t[i].t1,&t[i].t2);}
	sort(t+1,t+1+r,cmp);
	for(int i=1;i<=r;i++){
		if(dist[t[i].t2]<=t[i].t1) {
			printf("%d\n",t[i].t1);
			return 0;
		}
		else {
			if(dist[t[i].t2]<t[i+1].t1) {
				printf("%d\n",dist[t[i].t2]);
				return 0;
			}
		}
	}
	return 0;
}
2022/8/12 10:25
加载中...