码迷,mamicode.com
首页 > 其他好文 > 详细

图论——最短路②

时间:2018-02-07 12:13:21      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:isp   单元   str   无法   ++i   mes   while   pos   mod   

RT

最短路计数

给出一个N个顶点M条边的无向无权图,顶点编号为1~N。问从顶点1开始,到其他每个点的最短路有几条。

输入输出格式

输入格式:

 输入第一行包含2个正整数N,M,为图的顶点数与边数。

接下来M行,每行两个正整数x, y,表示有一条顶点x连向顶点y的边,请注意可能有自环与重边。

 输出格式:

 输出包括N行,每行一个非负整数,第i行输出从顶点1到顶点i有多少条不同的最短路,由于答案有可能会很大,你只需要输出mod 100003后的结果即可。如果无法到达顶点i则输出0。

样例

输入:      输出:

5 7          1
1 2          1

1 3          1
2 4          2
3 4          4
2 3
4 5
4 5

 

OK,一看这题就是。。。。

一个单元最短路,然后....就不会了QAQ

其实思考SPFA的做法,每次更新是都是拿最小边更新

如果边长度一样,不就是多了一条最短路???

有点道理;

技术分享图片
#include <cstdio>
#include <algorithm>
#include <queue>

using namespace std;

struct data{int v,nxt;}edge[2000010];
int cnt,alist[1000010];
inline void add(int u,int v)
{
    edge[++cnt].v=v;edge[cnt].nxt=alist[u];
    alist[u]=cnt;
}
int n,m;
queue <int> q;int d[1000010];bool book[1000010];
int ans[1000010];
int main()
{
   // freopen("in","r",stdin);
    scanf("%d%d",&n,&m);
    for(int i=1;i<=m;++i)
    {
        int v,u;
        scanf("%d%d",&v,&u);   ///双向边
        add(v,u);
        add(u,v);
    }
    for(int i=1;i<=n;++i) d[i]=0x3f3f3f3f;
    d[1]=0;ans[1]=1;q.push(1);book[1]=true;    //初值为1
    while(!q.empty())
    {
        int now=q.front();q.pop();book[now]=false;
        int nxt=alist[now];
        while(nxt)
        {
            int v=edge[nxt].v;
            if(d[v]>d[now]+1)
            {
                d[v]=d[now]+1;
                ans[v]=ans[now];
                if(!book[v]){q.push(v);book[v]=true;}
            }
            else if(d[v]==d[now]+1)                       //边长一样时,+1s
            {
                ans[v]=(ans[v]+ans[now])%100003;
            }
            nxt=edge[nxt].nxt;
        }
    }
    for(int i=1;i<=n;++i)printf("%d\n",ans[i]);
}    
View Code

                                                                              10:33:08

 

图论——最短路②

标签:isp   单元   str   无法   ++i   mes   while   pos   mod   

原文地址:https://www.cnblogs.com/AidenPearce/p/8425452.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!