zoukankan      html  css  js  c++  java
  • 洛谷P4779 Dijkstra 模板

    这道题很久之前做过

    今天复习(复读)一遍

    有疑问的就是pair的专属头文件#include<utility>

    但是据说iostream和vector等已经包含了这个

    #include<queue> //据说pair有专门的头文件utility,但是交到洛谷上就变成了queue
    #include<queue>
    #include<iostream>
    #include<cmath>
    #include<cstring>
    #include<cstdio>
    using namespace std;
    priority_queue<pair<int,int> > q; //pair用堆优化(这是一个优先队列从大到小
    struct edge{
    int next,to,dis;
    };
    edge e[200800];
    int head[1000010];
    int d[100800],vis[100800];
    int s;
    int size,n,m;
    void addedge(int next,int to,int dis) //链表加边 如果不清楚的话墙裂安利自己手动模拟运算一下
    //或者用Excel手算,新手不明白的原因是这种做法是把先加的边放在最底下,head[点]以及next[点]存的是该点的数组下标
    //而to存的是这个点
    {
    e[++size].next=head[next];
    e[size].to=to;
    e[size].dis=dis;
    head[next]=size;
    }
    void dij(int start)
    {
    memset(d,0x3f,sizeof(d));
    memset(vis,0,sizeof(vis));
    d[start]=0; //我 到 我自己 没有距离
    q.push(make_pair(0,start));
    while(!q.empty())
    {
    int t=q.top().second;
    q.pop();
    if(vis[t]) continue; //dij的宗旨是每个点访问一次
    vis[t]=1;
    for(int i=head[t];i;i=e[i].next)
    {
    int y=e[i].to;
    int k=e[i].dis;
    if(d[y]>d[t]+k) //如果一个路线比你短,还比你经过的点多(划去)
    {
    d[y]=d[t]+k;
    q.push(make_pair(-d[y],y)); //例如3比5小,但是-3比-5大
    }
    }
    }
    }
    int main()
    {

    cin>>n>>m>>s;
    for(int i=1;i<=m;i++)
    {
    int tx,ty,tdis;
    scanf("%d %d %d",&tx,&ty,&tdis);
    addedge(tx,ty,tdis);
    }
    dij(s);
    for(int i=1;i<=n;i++)
    printf("%d ",d[i]);
    return 0;
    }

    赋初值用 63是用二进制赋值变成2^6-1(占7个)至于不是127是因为第一个int数组里面存的是正负如果用127可能弄出负值

  • 相关阅读:
    SQL学习
    FOR XML PATH
    IOS学习网址
    weak nonatomic strong等介绍(ios)
    UVALive3045 POJ2000 ZOJ2345 Gold Coins
    UVA713 UVALive5539 POJ1504 ZOJ2001 Adding Reversed Numbers
    UVA713 UVALive5539 POJ1504 ZOJ2001 Adding Reversed Numbers
    UVA439 POJ2243 HDU1372 ZOJ1091 Knight Moves【BFS】
    UVA439 POJ2243 HDU1372 ZOJ1091 Knight Moves【BFS】
    UVA10905 Children's Game
  • 原文地址:https://www.cnblogs.com/zsx6/p/11052948.html
Copyright © 2011-2022 走看看