Poj(1125),Floyd,

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

多源点最短路中的,最长路的,最短路。 看到这里就懵逼了,解释一下,找到一个源点,使得路最短,(遍历源点),路最短怎么求呢? 就是找到从该源点出发,到达所有点中的最长的点的路径,就是他的最短路,然后根据n个源点,找到这样的最长路最短的,就行了。

这里的具体Floyd算法,我还没推过,dis[i][j]从I到J的最短路。

#include <stdio.h>
#include <string.h>
#include <algorithm>

using namespace std;

#define INF 0x3f3f3f3f

int dis[105][105];
int n;

void floyd()
{
    for(int k=1;k<=n;k++)
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
                dis[i][j] = min(dis[i][j],dis[i][k]+dis[k][j]);

    int minlength = INF;
    int flag = 0;
    for(int i=1;i<=n;i++)
    {
        int maxlength = 0;
        for(int j=1;j<=n;j++)
        {
            if(i!=j&&dis[i][j]>maxlength)
                maxlength = dis[i][j];
        }

        if(minlength>maxlength)
        {
            minlength = maxlength;
            flag = i;
        }
    }
    if(flag)
        printf("%d %d\n",flag,minlength);
    else printf("disjoint\n");
}

int main()
{
    while(scanf("%d",&n),n)
    {
        memset(dis,INF,sizeof(dis));

        for(int i=1; i<=n; i++)
        {
            int pairs;
            scanf("%d",&pairs);
            for(int j=1; j<=pairs; j++)
            {
                int to,time;
                scanf("%d%d",&to,&time);
                dis[i][to] = time;
            }
        }
        floyd();
    }
    return 0;
}
时间: 2024-08-17 15:58:33

Poj(1125),Floyd,的相关文章

最短路知识点总结(Dijkstra,Floyd,SPFA,Bellman-Ford)

Dijkstra算法: 解决的问题: 带权重的有向图上单源最短路径问题.且权重都为非负值.如果采用的实现方法合适,Dijkstra运行时间要低于Bellman-Ford算法. 思路: 如果存在一条从i到j的最短路径(Vi.....Vk,Vj),Vk是Vj前面的一顶点.那么(Vi...Vk)也必定是从i到k的最短路径.为了求出最短路径,Dijkstra就提出了以最短路径长度递增,逐次生成最短路径的算法.譬如对于源顶点V0,首先选择其直接相邻的顶点中长度最短的顶点Vi,那么当前已知可得从V0到达Vj

最短路(Dijkstra,Floyd,Bellman_Ford,SPFA)

当然,这篇文章是借鉴大佬的... 最短路算法大约来说就是有4种——Dijkstra,Floyd,Bellman_Ford,SPFA 接下来,就可以一一看一下... 1.Dijkstra(权值非负,适用于有向图及无向图,单源最短路) 1 Dijkstra's算法解决的是图中单个源点到其它顶点的最短路径.只能解决权值非负(看了代码就知道了)2 Dijkstral只能求出任意点到达源点的最短距离(不能求出任意两点之间的最短距离),同时适用于有向图和无向图,复杂度为O(n^2).3算法的过程: 1设置顶

PoJ(2263),Floyd,最小值中的最大值

题目链接:http://poj.org/problem?id=2263 题意:题中给出相连通不同城市之间的载货量,要求找到一条从指定起点到终点的路径,并满足载货量最大. #include <iostream> #include <cstdio> #include <cstring> #include <string> using namespace std; const int POINT = 210; int dis[POINT][POINT]; stri

Poj(3615),Floyd,最大值中的最小值

题目链接:http://poj.org/problem?id=3615 题意:大致题意:有N个木桩,和M个木桩对之间的高度差(从x跳到y需要往上跳的高度).从x跳跃到y的路径消耗的体力值是路径中的一个最大高度差.求一条消耗体力最小的路径. #include <stdio.h> #include <string.h> #include <algorithm> using namespace std; #define INF 0x3f3f3f3f int dis[350][

Stockbroker Grapevine - poj 1125 (Floyd算法)

Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 30454   Accepted: 16659 Description Stockbrokers are known to overreact to rumours. You have been contracted to develop a method of spreading disinformation amongst the stockbrokers to give

杭电1874-畅通工程续(最短路径,dijkstra,spfa,floyd)

畅通工程续 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 37458    Accepted Submission(s): 13826 Problem Description 某省自从实行了很多年的畅通工程计划后,终于修建了很多路.不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些方案要比另一些方案行

POJ 1125 Stockbroker Grapevine (Floyd算法)

Floyd算法计算每对顶点之间的最短路径的问题 题目中隐含了一个条件是一个人可以同时将谣言传递给多个人 题目最终的要求是时间最短,那么就要遍历一遍求出每个点作为源点时,最长的最短路径长是多少,再求这些值当中最小的是多少,就是题目所求 #include<bits/stdc++.h> using namespace std; int n,x,p,t; int m[120][120],dist[120][120],Max[120]; void floyd(int n,int m[][120],int

POJ-1847 最短路裸题,Floyd, Bellman, Dijkstra, Spfa

POJ 1847 题意:n个点,电车从A到B.每个点可以到其它ki个点,但默认只通往给出的第一个点,如果要到其它点,必须改变轨道方向一次.问A到B最少改变几次轨道方向. 总结:裸裸的最短路,所以,狠狠的把Floyd, Bellman, Dijkstra, Spfa都给撸了一遍.一个字,爽! // POJ-1847 //#include<bits/stdc++.h> #include<iostream> #include<cstdio> #include<cstdl

POJ 3320 尺取法,Hash,map标记

1.POJ 3320 2.链接:http://poj.org/problem?id=3320 3.总结:尺取法,Hash,map标记 看书复习,p页书,一页有一个知识点,连续看求最少多少页看完所有知识点 必须说,STL够屌.. #include<iostream> #include<cstring> #include<cmath> #include<queue> #include<algorithm> #include<cstdio>