zoukankan      html  css  js  c++  java
  • 【模板】最短路方案数统计

    审题要严密!!

    板子

    板子2

    #include<bits/stdc++.h>
    using namespace std;
    int head[5000000],dis[5000000],t,l,n,m,k,p,ans,duan,sum[500000];
    bool sign[5000000];
    struct node
    {
        int to,nxt,val;
    } a[5000000];
    inline void add(int from,int to,int v)
    {
        a[++l].to=to;
        a[l].val=v;
        a[l].nxt=head[from];
        head[from]=l;
    }
    void dijkstra()
    {
        priority_queue < pair<int,int> > q;
        for(int i=1; i<=n; i++)
            dis[i]=123456789;
        dis[1]=0;
        q.push(make_pair(0,1));
        while(q.size())
        {
            int xx=q.top().second;
            q.pop();
            if(sign[xx])continue;
            sign[xx]=1;
            for(int i=head[xx]; i; i=a[i].nxt)
            {
                int y=a[i].to;
                if(dis[y]>dis[xx]+a[i].val)
                {
                    dis[y]=dis[xx]+a[i].val;
                    sum[y]=sum[xx];
                    q.push(make_pair(-dis[y],y));
                }
                else if(dis[y]==dis[xx]+a[i].val)
                    sum[y]=(sum[y]+sum[xx])%p;
            }
        }
    }
    int main()
    {
        scanf("%d",&t);
        for(int tt=1; tt<=t; tt++)
        {
            memset(head,0,sizeof(head));
            memset(sign,0,sizeof(sign));
            memset(sum,0,sizeof(sum));
            scanf("%d%d%d%d",&n,&m,&k,&p);
            sum[1]=1;
            for(int i=1; i<=m; i++)
            {
                int x,y,z;
                scanf("%d%d%d",&x,&y,&z);
                add(x,y,z);
            }
            dijkstra();
            printf("%d
    ",sum[n]%p);
        }
        return 0;
    }
  • 相关阅读:
    java中的object类
    java中super的使用
    java中final的使用
    java中的继承初始化顺序
    java中的方法重写
    springMVC的流程
    dubbo与zookeeper
    java的几种常见数据结构
    集合框架之List和Set区别
    集合框架
  • 原文地址:https://www.cnblogs.com/yige2019/p/11844520.html
Copyright © 2011-2022 走看看