zoukankan      html  css  js  c++  java
  • POJ 3268 (dijkstra变形)

    题目链接 :http://poj.org/problem?id=3268

    Description

    One cow from each of N farms (1 ≤ N ≤ 1000) conveniently numbered 1..N is going to attend the big cow party to be held at farm #X (1 ≤ X ≤ N). A total of M (1 ≤ M ≤ 100,000) unidirectional (one-way roads connects pairs of farms; road i requires Ti (1 ≤ Ti ≤ 100) units of time to traverse.

    Each cow must walk to the party and, when the party is over, return to her farm. Each cow is lazy and thus picks an optimal route with the shortest time. A cow's return route might be different from her original route to the party since roads are one-way.

    Of all the cows, what is the longest amount of time a cow must spend walking to the party and back?

    Input

    Line 1: Three space-separated integers, respectively: NM, and X 
    Lines 2..M+1: Line i+1 describes road i with three space-separated integers: AiBi, and Ti. The described road runs from farm Ai to farm Bi, requiring Ti time units to traverse.

    Output

    Line 1: One integer: the maximum of time any one cow must walk.

    Sample Input

    4 8 2
    1 2 4
    1 3 2
    1 4 7
    2 1 1
    2 3 5
    3 1 2
    3 4 4
    4 2 3

    Sample Output

    10

    Hint

    Cow 4 proceeds directly to the party (3 units) and returns via farms 1 and 3 (7 units), for a total of 10 time units
     
    题意 :给出n个点和m条边,接着是m条边,代表从牛a到牛b需要花费c时间,现在所有牛要到牛x那里去参加聚会,并且所有牛参加聚会后还要回来,给你牛x,除了牛x之外的牛,他们都有一个参加聚会并且回来的最短时间,从这些最短时间里找出一个最大值输出
    思路:运用两次单源最短路算法,先求牛x到其他牛的最短距离,然后倒置将所有的边取反,然后算出其他牛到牛x的最短距离,两者相加,求出最大距离然后输出。
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    const int N = 1e4+10;
    int e[N][N],dis[N],book[N],ans[N];
    int inf = 99999999; 
    int n,m,x,i,j,t1,t2,t3;
    void disk(){
    	memset(dis,0,sizeof(dis));
    	for(i = 1; i <= n; i++){
    		dis[i] = e[x][i];
    	}
    	memset(book,0,sizeof(book));
    	book[x] = 1;
    	int min = inf,h;
    	for(i = 1; i <= n; i++){
    		min = inf;
    		for(j = 1; j <= n; j++){
    			if(book[j] == 0 && dis[j] < min){
    				min = dis[j];
    				h = j;
    			}
    		}
    		book[h] = 1;
    		for(int v = 1; v <= n; v++){
    			if(dis[v] > dis[h] + e[h][v]){
    				dis[v] = dis[h] + e[h][v];
    			}
    		}
    	}
    }
    void change(){  //倒置所有的边
    	for(i = 1; i <= n; i++){
    		for(j = 1; j <= i; j++){
    			swap(e[i][j],e[j][i]);
    		}
    	}
    }
    int main()
    {
    	scanf("%d%d%d",&n,&m,&x);
    	memset(ans,0,sizeof(ans));
    	for(i = 1; i <= n; i++){
    		for(j = 1; j <= n; j++){
    			if(i == j){
    				e[i][j] = 0;
    			}
    			else{
    				e[i][j] = inf;
    			}
    		}
    	}
    	for(i = 1; i <= m; i++){
    		scanf("%d%d%d",&t1,&t2,&t3);
    		e[t1][t2] = t3;
    	}
    	disk();
    	for(i = 1; i <= n; i++){
    		ans[i] += dis[i];
    	}
    	change();
    	disk();
    	for(i = 1; i <= n; i++){
    		ans[i] += dis[i];
    	}
    	int max = 0;
    	for(i = 1; i <= n; i++){
    		if(max < ans[i] && ans[i] < inf){
    			max = ans[i];
    		}
    	}
    	printf("%d
    ",max);
    	return 0;
    }
    

      

  • 相关阅读:
    添加要素后弹出属性窗口
    预览ArcGIS 10中有关编辑的变化
    【制图】ArcGIS10制图新特性
    arcgis 设置掩膜Mask图层
    ArcGIS 10研究(五)Desktop之制图表达和图、表
    【制图】ArcGIS10制图新特性
    ESRI ArcGis10版本的优缺点(转)
    TCP超时重传、滑动窗口、拥塞控制、快重传和快恢复
    进程关闭解决IIS无响应假死状态
    android开源项目旅游记录
  • 原文地址:https://www.cnblogs.com/clb123/p/10681297.html
Copyright © 2011-2022 走看看