zoukankan      html  css  js  c++  java
  • 最短路计数(模板)

    模板题

    bfs实现,借用dep比较路径的长度

    #include<bits/stdc++.h>
    #define mod 100003
    #define M 2000002
    #define N 1000002
    using namespace std;
    int read()
    {
        int x=0,f=1;char s=getchar();
        while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();}
        while(s>='0'&&s<='9'){x=x*10+s-'0';s=getchar();}
        return x*f;
    }
    int tot=0;
    struct EDGE{
        int nextt,to;
    }w[M*2];
    int head[N],dep[N],num[N],vis[N];
    void add(int a,int b)
    {
        tot++;
        w[tot].nextt=head[a];
        w[tot].to=b;
        head[a]=tot;
    }
    void bfs(int s)
    {
        queue<int>q;
        num[s]=1;vis[s]=1;q.push(s);
        while(!q.empty())
        {
            int x=q.front();q.pop();
            for(int i=head[x];i;i=w[i].nextt)
            {
                int v=w[i].to;
                if(!vis[v])dep[v]=dep[x]+1,num[v]=num[x],vis[v]=1,q.push(v);
                else if(dep[v]==dep[x]+1)num[v]=(num[v]+num[x])%mod;//如果走到过v,那么它的dep是dep[x]+1或更大,num是累加
                //先到达v的路径一定更短 
            }
        }
    }
    int main()
    {
        int n=read(),m=read();
        for(int i=1;i<=m;++i)
        {
            int a=read(),b=read();
            add(a,b);add(b,a);
        }
        bfs(1);
        for(int i=1;i<=n;++i)
          printf("%d
    ",num[i]);
    } 
    View Code
  • 相关阅读:
    每日日报
    每日日报
    每日日报
    每日日报
    每日日报
    每日日报
    每日日报
    每日日报
    7.21Java入门--->第二节
    7.20Java入门--->第一节
  • 原文地址:https://www.cnblogs.com/yyys-/p/11402693.html
Copyright © 2011-2022 走看看