记录编号 | 548423 | 评测结果 | AAAAAAAAAA | ||
---|---|---|---|---|---|
题目名称 | [USACO Oct09] 热浪 | 最终得分 | 100 | ||
用户昵称 | 是否通过 | 通过 | |||
代码语言 | 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*/