• [洛谷1144]最短路计数


    思路:

    Dijkstra求最短路,同时统计最短路个数,当新增最短路时,增加的条数是父亲结点的条数。

     1 #include<cstdio>
     2 #include<cctype>
     3 #include<vector>
     4 #include<functional>
     5 #include<ext/pb_ds/priority_queue.hpp>
     6 inline int getint() {
     7     char ch;
     8     while(!isdigit(ch=getchar()));
     9     int x=ch^'0';
    10     while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0');
    11     return x;
    12 }
    13 const int N=1000000,inf=0x7fffffff,mod=100003;
    14 std::vector<int> e[N];
    15 inline void add_edge(const int u,const int v) {
    16     e[u].push_back(v);
    17     e[v].push_back(u);
    18 }
    19 struct Vertex {
    20     int id,d,ans;
    21     bool operator > (const Vertex &x) const {
    22         return d>x.d;
    23     }
    24 };
    25 __gnu_pbds::priority_queue<Vertex,std::greater<Vertex> > q;
    26 __gnu_pbds::priority_queue<Vertex,std::greater<Vertex> >::point_iterator p[N];
    27 bool v[N]={0};
    28 int main() {
    29     int n=getint(),m=getint();
    30     while(m--) {
    31         add_edge(getint(),getint());
    32     }
    33     for(int i=1;i<=n;i++) {
    34         p[i]=q.push((Vertex){i,(i==1)?0:inf,(i==1)?1:0});
    35     }
    36     for(Vertex u=q.top();u.d!=inf;u=q.top()) {
    37         for(unsigned int i=0;i<e[u.id].size();i++) {
    38             if(v[e[u.id][i]]) continue;
    39             int &v=e[u.id][i];
    40             if(u.d+1<p[v]->d) {
    41                 q.modify(p[v],(Vertex){v,u.d+1,p[u.id]->ans%mod});
    42             }
    43             else if(u.d+1==p[v]->d) {
    44                 q.modify(p[v],(Vertex){v,p[v]->d,(p[v]->ans+p[u.id]->ans)%mod});
    45             }
    46         }
    47         q.modify(p[u.id],(Vertex){u.id,inf,u.ans});
    48         v[u.id]=true;
    49     }
    50     for(int i=1;i<=n;i++) {
    51         printf("%d
    ",p[i]->ans);
    52     }
    53     return 0;
    54 }
  • 相关阅读:
    php 加入即时推送功能
    Yii GridView::widget
    linux 文件文件夹操作
    一套一般般的前端框架 layui
    supervisor 与 yii定时任务 crontab的使用
    yii 国际化
    如何在Webstorm/Phpstorm中设置连接FTP,并快速进行文件比较,上传下载,同步等操作
    docker搭建lnmp环境
    docker搭建lnmp环境(问题,资料,命令)
    yii2 刷新缓存(刷新模型缓存)
  • 原文地址:https://www.cnblogs.com/skylee03/p/7242880.html
Copyright © 2020-2023  润新知