求调(样例都没过)
  • 板块P1396 营救
  • 楼主cyx20091026
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/10/23 21:30
  • 上次更新2024/10/23 22:42:48
查看原帖
求调(样例都没过)
794148
cyx20091026楼主2024/10/23 21:30

求调(样例都没过)

#include<bits/stdc++.h>
using namespace std;
int n,m,s,t;
struct edge{
	int to,len,nxt;
}v[20005];
int tot=0;
int head[10005];
void add(int ui,int vi,int wi){
	tot++;
	v[tot].nxt=head[ui];
	v[tot].len=wi;
	v[tot].to=vi;
	head[ui]=tot;
}
int dis[10005];
bool has[10005];
priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > >pq;
void dijkstra(int start){	
	pq.push(make_pair(0,start));
	while(!pq.empty()){
		int min_dis=pq.top().first;
		int id=pq.top().second;
		pq.pop();
		if(has[id]) continue;
		has[id]=1;
		for(int i=head[id];i!=-1;i=v[i].nxt){
			if(!has[v[i].to]&&dis[v[i].to]>min_dis+v[i].len){
				dis[v[i].to]=min_dis+v[i].len;
				pq.push(make_pair(dis[v[i].to],v[i].to));
			}
		}
	}
}
int main(){
	memset(dis,0x3f,sizeof(dis));
	memset(head,-1,sizeof(head));
	cin>>n>>m>>s>>t;
	int ui,vi,wi;
	for(int i=1;i<=m;i++){
		cin>>ui>>vi>>wi;
		add(ui,vi,wi);
	}
	dis[s]=0;
	dijkstra(s);
	cout<<dis[t];
	return 0;
}
2024/10/23 21:30
加载中...