ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

P1144 最短路计数

2021-07-27 21:01:20  阅读:186  来源: 互联网

标签:dep te const int 短路 计数 maxn P1144 include


题目:

https://www.luogu.com.cn/problem/P1144

用bfs来求最短路,用dep数组来表示深度,用c数组来表示从1到达当前状态的数量

如果当前的dep[w]==dep[te]+1的话就把到达te的次数加给w

代码:

#include<stdio.h>
#include<algorithm>
#include<vector>
#include<queue>

using namespace std;
const int maxn=1e6+6;
const int maxm=2e6+6;
const int mod=100003;
vector<int> G[maxn];
int n,m;
int v[maxn],c[maxn],dep[maxn];
int main()
{scanf("%d %d",&n,&m);
  int x,y;
  for(int i=1;i<=m;i++)
  {
      scanf("%d %d",&x,&y);
      G[x].push_back(y);
      G[y].push_back(x);
  }
  queue<int> q;
  q.push(1);
  v[1]=1;
  dep[1]=0;
  c[1]=1;
  while(!q.empty())
  {
      int te=q.front();
      q.pop();
      for(int j=0;j<G[te].size();j++)
      {
          int w=G[te][j];
          if(!v[w])
          {
              v[w]=1;
              dep[w]=dep[te]+1;
            q.push(w);
          }
         if( dep[w]==dep[te]+1)
         {
             c[w]=(c[w]+c[te])%mod;
             //来源只能是depth比他小一的数
         //    printf("w=%d te=%d\n",w,te);
           //   printf("c[w]=%d c[te]=%d\n",c[w],c[te]);

         }
      }
  }
  for(int i=1;i<=n;i++)
    printf("%d\n",c[i]);
}

 

标签:dep,te,const,int,短路,计数,maxn,P1144,include
来源: https://www.cnblogs.com/aacm/p/15067867.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有