zoukankan      html  css  js  c++  java
  • BZOJ3408: [Usaco2009 Oct]Heat Wave 热浪

    最短路模板。选迪杰。

     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<stdlib.h>
     4 #include<algorithm>
     5 #include<queue>
     6 //#include<iostream>
     7 using namespace std;
     8 
     9 int n,m,s,t;
    10 #define maxn 2511
    11 #define maxm 12411
    12 const int inf=0x3f3f3f3f;
    13 struct Graph
    14 {
    15     struct Edge{int to,v,next;}edge[maxm];int first[maxn],le;
    16     Graph() {memset(first,0,sizeof(first));le=2;}
    17     void in(int x,int y,int v) {Edge &e=edge[le];e.to=y;e.v=v;e.next=first[x];first[x]=le++;}
    18     void insert(int x,int y,int v) {in(x,y,v);in(y,x,v);}
    19     int dis[maxn];bool vis[maxn];
    20     struct qnode
    21     {
    22         int id,v;
    23         bool operator < (const qnode &b) const {return v<b.v;}
    24         bool operator > (const qnode &b) const {return v>b.v;}
    25     };
    26     priority_queue<qnode,vector<qnode>,greater<qnode> > q;
    27     void dijkstra(int s)
    28     {
    29         for (int i=1;i<=n;i++) dis[i]=inf;
    30         memset(vis,0,sizeof(vis));
    31         q.push((qnode){s,0});
    32         while (!q.empty())
    33         {
    34             const int x=q.top().id,d=q.top().v;q.pop();
    35             if (vis[x]) continue;
    36             vis[x]=1;dis[x]=d;
    37             for (int i=first[x];i;i=edge[i].next)
    38             {
    39                 const Edge &e=edge[i];
    40                 if (dis[e.to]>d+e.v)
    41                 {
    42                     dis[e.to]=d+e.v;
    43                     q.push((qnode){e.to,dis[e.to]});
    44                 }
    45             }
    46         }
    47     }
    48 }g;
    49 int x,y,v;
    50 int main()
    51 {
    52     scanf("%d%d%d%d",&n,&m,&s,&t);
    53     for (int i=1;i<=m;i++)
    54     {
    55         scanf("%d%d%d",&x,&y,&v);
    56         g.insert(x,y,v);
    57     }
    58     g.dijkstra(s);
    59     printf("%d
    ",g.dis[t]);
    60     return 0;
    61 }
    View Code
  • 相关阅读:
    Python中如何调用Linux命令
    python入门小记
    DNS域名解析的过程
    阿里云Aliyun_server
    ipython及Python初体验
    js 的数值限制可能引起的问题
    页面图片中间有条线----解决
    ie6幽灵文字及解决办法
    解除工商银行15分钟限制
    ie6 无法显示网页 已终止操作
  • 原文地址:https://www.cnblogs.com/Blue233333/p/7523032.html
Copyright © 2011-2022 走看看