洛谷 P1144 最短路计数(最短路_SPFA)

7人阅读 评论(0) 收藏 举报
分类:

传送门


数据范围看起来好像很吓人,但我还是水过去了嘻嘻
先跑一遍SPFA确定最短路长度,然后用记忆化搜索累加答案(点1到点1的答案为1,然后递归搜索,如果下一个点在最短路径上,我就把我的答案加上它的答案)

Code:

#include<cstdio>
#include<cstdlib>
#include<cstring>

struct node{int x,y,next;}a[4000010];
int n,m,len,st,ed;
int first[1000010],q[1000010],f[1000010],ans[1000010];

void ins(int x,int y) {len++;a[len].x=x;a[len].y=y;a[len].next=first[x];first[x]=len;}

int dfs(int x)
{
    if(ans[x]) return ans[x];
    for(int i=first[x];i;i=a[i].next)
        if(f[x]-1==f[a[i].y])//如果这条边在最短路径上 
            ans[x]=(ans[x]+dfs(a[i].y))%100003;
    return ans[x];
}

int main()
{
    scanf("%d %d",&n,&m);
    for(int i=1;i<=m;i++)
    {
        int x,y;
        scanf("%d %d",&x,&y);
        ins(x,y);ins(y,x);
    }
    memset(q,0,sizeof(q));q[1]=1;
    memset(f,63,sizeof(f));f[1]=0;
    st=1;ed=2;
    while(st!=ed)
    {
        int x=q[st];
        for(int i=first[x];i;i=a[i].next)
        {
            int y=a[i].y;
            if(f[y]>f[x]+1)
            {
                f[y]=f[x]+1;
                q[ed++]=y;
            }
        }
        st++;
    }
    ans[1]=1;
    for(int i=1;i<=n;i++)
        printf("%d\n",dfs(i));
}
查看评论

洛谷 1144_最短路计数_spfa

题目描述给出一个N个顶点M条边的无向无权图,顶点编号为1~N。问从顶点1开始,到其他每个点的最短路有几条。思路因为是无权边,所以第一个走到的肯定是最短的,然后在spfa中开一个记录的数组,每次走到一个...
  • Nidhogg__
  • Nidhogg__
  • 2017-03-04 08:58:54
  • 387

路径统计(最短路计数)

(改编自Luogu P1608) 题目概述: 给定一张有向图,求从1到n的最短路径长度,以及有多少条不同的路径满足最短路径长度,不保证没有重边,保证没有自环。 数据规模: 1...
  • Stockholm_Sun
  • Stockholm_Sun
  • 2017-08-16 08:19:42
  • 430

迈出一大步[spfa]最短路计数

题目描述 给出一个N个顶点M条边的无向无权图,顶点编号为1~N。问从顶点1开始,到其他每个点的最短路有几条。分析 SPFA,然后每次搜到新点给这个点加上之前的方案数就好啦 代码复杂度肯定比大佬们...
  • SSL_QYH0Ice
  • SSL_QYH0Ice
  • 2017-08-10 19:43:38
  • 170

【PAT】Emergency(最短路条数-SPFA)

【PAT】Emergency(最短路条数-SPFA) As an emergency rescue team leader of a city, you are given a specia...
  • ChallengerRumble
  • ChallengerRumble
  • 2016-05-07 17:55:38
  • 1384

【luogu1144】最短路计数(SPFA)

影帝
  • Blue_CuSO4
  • Blue_CuSO4
  • 2017-05-27 18:45:03
  • 169

最短路计数 洛谷 1114 最短路

题目描述给出一个N个顶点M条边的无向无权图,顶点编号为1~N。问从顶点1开始,到其他每个点的最短路有几条。分析可以使用最短路。松弛的时候如果遇到没有访问过的则ans[v]=ans[u],如果遇到访问过...
  • A_loud_name
  • A_loud_name
  • 2017-01-14 17:17:12
  • 556

洛谷P1144 最短路计数(spfa)

最短路计数 题目描述 给出一个N个顶点M条边的无向无权图,顶点编号为1~N。问从顶点1开始,到其他每个点的最短路有几条。 输入输出格式 输入格式: 输入第一行包含2个正整数N,M,为图的顶...
  • zhanghaoxian1
  • zhanghaoxian1
  • 2017-03-07 21:05:14
  • 138

最短路计数

题目描述给出一个N个顶点M条边的无向无权图,顶点编号为1~N。问从顶点1开始,到其他每个点的最短路有几条。输入输出格式输入格式: 输入第一行包含2个正整数N,M,为图的顶点数与边数。接下来M行,每行...
  • sinat_34943123
  • sinat_34943123
  • 2016-08-26 21:35:03
  • 371

洛谷P1144 最短路计数

题目描述 给出一个N个顶点M条边的无向无权图,顶点编号为1~N。问从顶点1开始,到其他每个点的最短路有几条。 输入输出格式 输入格式: 输入第一行包含2个正整数N,M,为图...
  • yangrui2002
  • yangrui2002
  • 2018-01-07 16:05:36
  • 63

洛谷 P1144 最短路计数

spfa
  • Rlt1296
  • Rlt1296
  • 2016-08-30 14:19:21
  • 280
    个人资料
    持之以恒
    等级:
    访问量: 725
    积分: 374
    排名: 20万+
    文章存档
    最新评论