zoukankan      html  css  js  c++  java
  • 题解 P1144 【最短路计数】

    这道题用一次SPFA就可以过了。在求最短路的同时,对答案进行统计即可。


    实现:

    (dis_i)表示从1到(i)的最短路(实在还是不懂的话看程序吧)。

    1. (dis_i>dis_j+1)时,直接令(ans_i=ans_j)即可。
    2. (dis_i=dis_j+1)时,那么到(i)的路径就可以多加上(j)的路径,即(ans_i=ans_i+ans_j)

    代码:

    #include <bits/stdc++.h>
    using namespace std;
    int n , m , p = 100003;
    int ans[1000010] , dis[1000010];
    bool vis[1000010];
    vector<int> a[1000010];
    queue<int> q;
    void spfa(){
    	q.push(1);
    	ans[1] = 1;
    	vis[1] = 1;
    	dis[1] = 0;
    	while(!q.empty()){
    		int x = q.front();
    		q.pop();
    		for(int i = 0; i < a[x].size(); i++){
    			int y = a[x][i];
    			if(dis[y] > dis[x] + 1){
    				dis[y] = dis[x] + 1;
    				ans[y] = ans[x];
    				if(!vis[y]){
    					vis[y] = 1;
    					q.push(y);
    				}
    			}else if(dis[y] == dis[x] + 1) ans[y] = (ans[y] + ans[x]) % p;
    		}
    		vis[x] = 0;	//出队列了就可以标记未走过了,因为我们要重复更新这个点直到最优 
    	}
    }
    int main(){
    	cin >> n >> m;
    	for(int i = 1; i <= m; i++){
    		int x , y;
    		cin >> x >> y;
    		a[x].push_back(y);
    		a[y].push_back(x);
    	}
    	for(int i = 1; i <= n; i++) dis[i] = 0x7fffffff;
    	spfa();
    	for(int i = 1; i <= n; i++) cout << ans[i] << endl;
    	return 0;
    }
    
    
  • 相关阅读:
    Spring AOP原理
    Spring Boot引入Oracle Jar
    Cookie
    资源验证
    HTTP各种特性
    高性能网络编程之IO和NIO阻塞分析
    Http协议基础及发展历史
    Http原理与实践
    设计模式-回顾
    http://jingyan.baidu.com/article/fcb5aff78e6a48edab4a7146.html
  • 原文地址:https://www.cnblogs.com/bzzs/p/13088263.html
Copyright © 2011-2022 走看看