zoukankan      html  css  js  c++  java
  • P1144 最短路计数

    P1144 最短路计数

    题目本体

    观察题目,

    很容易很容易很容易想到……

    (bfs)

    因为每一条边的边权都是一定的——1,

    所以其实我们完全不需要有任何的顾虑。

    直接(bfs)搞起来。

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<queue>
    #include<algorithm>
    using namespace std;
    int n,m,x,y,cnt;
    queue<int> zdx;
    int go[2000001],nxt[2000001],head[2000001],vis[2000001],dis[2000001],num[2000001];
    void add(int u,int v){
    	go[++cnt] = v;
    	nxt[cnt] = head[u];
    	head[u]=cnt;
    }//链式前向星
    void bfs(int x){
    	zdx.push(x);
    	vis[x]=1;
    	dis[x]=0;
    	num[x]=1;
    	while(!zdx.empty()){
    		int asdfo=zdx.front();
    		zdx.pop();
    		for(int i=head[asdfo];i;i=nxt[i]){
    			int lzw=go[i];
    			if(!vis[lzw]){
    				dis[lzw]=dis[asdfo]+1;//最短边权累计
    				vis[lzw]=1;
    				zdx.push(lzw);
    			}
    			if(dis[lzw]==dis[asdfo]+1){
    				num[lzw]+=num[asdfo];
    				num[lzw]%=100003;//注意取模
    			}
    		}
    	}
    }
    int main(){
    	scanf("%d%d",&n,&m);
    	for(int i=1;i<=m;i++){
    		scanf("%d%d",&x,&y);
    		add(x,y);
    		add(y,x);
    	}
    	bfs(1);
    	for(int i=1;i<=n;i++){
    		printf("%d
    ",num[i]);
    	}
    	return 0;
    }
    
  • 相关阅读:
    第24课 多线程开发
    第23课 装饰器
    第22课 调用外部程序
    第20课 异常处理
    第19课 习题讲解
    第18课 面向对象
    第17课 调试程序
    第16课 pycharm 使用
    第15课 模块与包
    第14课 再识函数
  • 原文地址:https://www.cnblogs.com/JingFenHuanZhe/p/P11440929.html
Copyright © 2011-2022 走看看