记录编号 |
548423 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[USACO Oct09] 热浪 |
最终得分 |
100 |
用户昵称 |
CSU_Turkey |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.034 s |
提交时间 |
2020-01-18 17:06:50 |
内存使用 |
13.87 MiB |
显示代码纯文本
#include<bits/stdc++.h>
#define LL long long
#define dl double
using namespace std;
const int inf=6205;
int n,m,s,e;
int fi[inf],nxt[inf<<1],to[inf<<1],cst[inf<<1],tot;
void link(int x,int y,int c){nxt[++tot]=fi[x];fi[x]=tot;to[tot]=y;cst[tot]=c;}
struct Dijk{
int dis,id;
bool operator < (const Dijk &o)const{
return dis > o.dis;
}
};
priority_queue<Dijk>S;
int dis[inf],vis[inf];
int main(){
freopen("heatwvx.in","r",stdin);
freopen("heatwvx.out","w",stdout);
// freopen("in.txt","r",stdin);
scanf("%d%d%d%d",&n,&m,&s,&e);
for(int i=1;i<=m;i++){int x,y,c;scanf("%d%d%d",&x,&y,&c);link(x,y,c);link(y,x,c);}
S.push((Dijk){0,s});memset(dis,0x7f,sizeof(dis));dis[s]=0;
while(!S.empty()){
Dijk u=S.top();S.pop();if(vis[u.id])continue;vis[u.id]=1;
for(int i=fi[u.id];i;i=nxt[i])
if(dis[to[i]] > dis[u.id]+cst[i]){
dis[to[i]]=dis[u.id]+cst[i];
S.push((Dijk){dis[to[i]],to[i]});
}
}
printf("%d\n",dis[e]);
return 0;
}
/*稠密图的话优化后还不如不优化的*/
/*mlogm*/