蒟蒻90分TLE来求助了QWQ
  • 板块P1396 营救
  • 楼主利维坦
  • 当前回复5
  • 已保存回复5
  • 发布时间2021/7/27 12:17
  • 上次更新2023/11/4 13:10:11
查看原帖
蒟蒻90分TLE来求助了QWQ
327193
利维坦楼主2021/7/27 12:17
#include<bits/stdc++.h>
using namespace std;

const int N=200005;

struct edge{
	int next,to,dis;
}g[2*N]; 

int n,m,x,y,z,s,t,head[N],num,vis[N],dis[N];

void add(int from,int to,int dis){
	g[++num].next=head[from];
	g[num].to=to;
	g[num].dis=dis;
	head[from]=num;
}

typedef pair<int,int> pii;//FIRST表示权值 

bool operator < (const pii &a, const pii &b){
	return a.first>b.first;
}

int main(){
	scanf("%d%d%d%d",&n,&m,&s,&t);
	for(int i=1;i<=m;i++){
		scanf("%d%d%d",&x,&y,&z); 
		add(x,y,z);
		add(y,x,z);
	} 
	priority_queue<pii>q;
	int edGe=0;
	memset(dis,0x3f,sizeof dis);
	dis[s]=0;
	q.push(make_pair(dis[s],s));
	while(!q.empty()){
		pii tmp=q.top();
		q.pop();
		int k=tmp.second;
//		if(vis[k]) continue;
		vis[k]=true;
		for(int i=head[k];i;i=g[i].next){
			if(dis[g[i].to]>max(dis[k],g[i].dis)){
				q.push(make_pair(max(dis[k],g[i].dis),g[i].to));
				dis[g[i].to]=max(dis[k],g[i].dis);
			}
		}
	}
	printf("%d\n",dis[t]);
	return 0; 
}

最后一个点TLE,思路是最朴素的dijkstra算法加堆优化,为啥还是超时???

2021/7/27 12:17
加载中...