• 51nod1459【二级最短路】


    标签说的是BFS。。。
    太菜,不知道怎么BFS。。。是不是spfa写,就叫BFS。。。感觉不是。。。。
    只是二级最短路的写法,直接搞就很容易了,简单题;

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    
    const int INF=0x3f3f3f3f;
    const int N=5e2+10;
    
    int val[N];
    struct asd{
        int w;
        int to;
        int next;
    };
    asd q[N*N];
    int head[N*N],tol,dis[N],d[N];
    int n,m,s,t;
    bool vis[N];
    queue<int>e;
    void spfa()
    {
        while(!e.empty())
            e.pop();
        for(int i=0;i<n;i++)
        {
            dis[i]=INF;
            d[i]=0;
            vis[i]=false;
        }
        d[s]=val[s];
        dis[s]=0;
        vis[s]=true;
        e.push(s);
        while(!e.empty())
        {
            int u=e.front();e.pop();
            vis[u]=0;
            for(int v=head[u];v!=-1;v=q[v].next)
            {
                int i=q[v].to;
                if(dis[i]>dis[u]+q[v].w)
                {
                    dis[i]=dis[u]+q[v].w;
                    d[i]=d[u]+val[i];
                    if(!vis[i])
                    {
                        vis[i]=1;
                        e.push(i);
                    }
                }
                else if(dis[i]==(dis[u]+q[v].w))
                {
                    if(d[i]<d[u]+val[i])
                        d[i]=d[u]+val[i];
                }
            }
        }
        printf("%d %d
    ",dis[t],d[t]);
    }
    
    void add(int a,int b,int c)
    {
        q[tol].to=b;
        q[tol].w=c;
        q[tol].next=head[a];
        head[a]=tol++;
    }
    
    void init()
    {
        memset(head,-1,sizeof(head));
        tol=0;
    }
    
    int main()
    {
        scanf("%d",&n);
        scanf("%d",&m);
        scanf("%d%d",&s,&t);
    
        for(int i=0;i<n;i++)
            scanf("%d",&val[i]);
    
        init();
        while(m--)
        {
            int a,b,c;
            scanf("%d%d%d",&a,&b,&c);
            add(a,b,c);
            add(b,a,c);
        }
        spfa();
        return 0;
    }
  • 相关阅读:
    单调队列和单调栈
    二叉搜索树(BST)
    高斯消元和高斯约旦消元 Gauss(-Jordan) Elimination
    扩展欧几里德算法
    基数排序
    智力题研究
    快速排序和快速选择
    快读模板
    C#知识点
    C#字段属性设置
  • 原文地址:https://www.cnblogs.com/keyboarder-zsq/p/5934753.html
Copyright © 2020-2023  润新知