poj1125--Floyd

题解:

有N个股票经济人能够互相传递消息。他们之间存在一些单向的通信路径。如今有一个消息要由某个人開始传递给其它全部人。问应该由哪一个人来传递,才干在最短时间内让全部人都接收到消息。

显然,用Floyd算法,然后选出每一个点到其它点的最长距离其中的最短距离。

/** \brief poj 1125 Floyd
 *
 * \param date 2014/7/31
 * \param state AC
 * \return memory 756k time 0ms
 *
 */

#include <iostream>
#include <fstream>
#include <cstring>

using namespace std;

const int MAXN=101;
int DistMap[MAXN][MAXN];
int n;
const int INF=20;
//int best;
//int num;

//bool Floyd()
void Floyd()
{
    for(int k=1;k<=n;k++)
    {
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
            {
                if(i!=j && DistMap[i][j]>DistMap[i][k]+DistMap[k][j])
                    DistMap[i][j]=DistMap[i][k]+DistMap[k][j];
            }
        }
    }
    //
    int maxlength, min_in_max=INF,flag_source;
    for(int i=1;i<=n;i++)//以i点作为各通路源点
    {
        maxlength=0;
        for(int j=1;j<=n;j++)
        {
            if(i!=j && DistMap[i][j]>maxlength)//寻找i到j的最长路径
            {
                maxlength=DistMap[i][j];
            }
        }
        if(min_in_max>maxlength)
        {
            min_in_max=maxlength;//寻找最长路径中的最短路
            flag_source=i;
        }
    }

    /*Output*/
    if(min_in_max<INF)
        cout<<flag_source<<‘ ‘<<min_in_max<<endl;
    else
        cout<<"disjoint"<<endl;
}

int main()
{
    //cout << "Hello world!" << endl;
    //freopen("input.txt","r",stdin);
    while(scanf("%d",&n)!=EOF)
    {
        memset(DistMap,INF,sizeof(DistMap));
        if(n==0)break;
        int num,v,w;
        for(int i=1;i<=n;i++)
        {
            cin>>num;
            for(int j=0;j<num;j++)
            {
                //DistMap[][]
                scanf("%d%d",&v,&w);
                DistMap[i][v]=w;
            }
        }
        //Floyd
        //if(Floyd()==false)
        //    cout<<"disjoint"<<endl;
        //else cout<<num<<" "<<best<<endl;
        Floyd();
    }
    return 0;
}
时间: 2024-10-06 06:54:37

poj1125--Floyd的相关文章

POJ1125 Stockbroker Grapevine【Floyd】

Stockbroker Grapevine Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 27977 Accepted: 15527 Description Stockbrokers are known to overreact to rumours. You have been contracted to develop a method of spreading disinformation amongst the st

POJ1125 Stockbroker Grapevine 多源最短路 Floyd

Description Stockbrokers are known to overreact to rumours. You have been contracted to develop a method of spreading disinformation amongst the stockbrokers to give your employer the tactical edge in the stock market. For maximum effect, you have to

POJ1125 Stockbroker Grapevine 【Floyd】

Stockbroker Grapevine Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 27431   Accepted: 15201 Description Stockbrokers are known to overreact to rumours. You have been contracted to develop a method of spreading disinformation amongst th

floyd算法 poj1125

Stockbroker Grapevine Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 28851   Accepted: 16003 Description Stockbrokers are known to overreact to rumours. You have been contracted to develop a method of spreading disinformation amongst th

POJ Stockbroker Grapevine(floyd)

https://vjudge.net/problem/POJ-1125 题意: 题意不是很好理解,首先输入一个n,表示有n个股票经纪人,接下来输入n行,每行第一个数m为该股票经纪人认识的经纪人数,然后输入m对数(a,t),表示第i个经纪人把消息传给第a个经纪人所需要的时间. 计算将消息传遍所有人所需要的最少时间. 思路: 起点任意,用floyd比较好.因为floyd求出的是每两点之间的最短路,所以最后计算最小时间时,需要先取最大值,比如说1号经纪人为起点,因为谁都可能为终点,所以枚举所有人,将最

POJ-1125 Stockbroker Grapevine---Floyd应用

题目链接: https://vjudge.net/problem/POJ-1125 题目大意: 股票经纪人要在一群人中散布一个谣言,而谣言只能在亲密的人中传递,题目各处了人与人之间的关系及传递谣言所用的时间,要求程序给出应以那个人为起点,可以在最短的时间内让所有的人都得知这个谣言.要注意从a到b传递的时间不一定等于从b到a的时间,如果没有方案能够让每一个人都知道谣言,则输出"disjoint".(有关图的连通性,你懂得!但好像不用考虑这种情况一样能AC,只能说测试数据有点小水!)题目数

AtCoder Beginner Contest 074 D - Restoring Road Network(Floyd变形)

题目链接:点我点我 题意:给出一个最短路的图,询问是否正确,如果正确的话,输出遍历所有点的最短路径和. 题解:判断是否正确的,直接再一次Floyd,判断是否会有A[i][k]+A[k][j]<A[i][j](通过中间点k使得两点间距离更短),如果有的话,直接输出-1. 要遍历到所有道路,并且路径和最小,我们可以尽可能用用中间点的路径(A[i][k]+A[k][j]==A[i][j]),这样本来遍历两个点,就可以遍历3个点了, 最后加的时候记得不要从重复加,从最小点往后加,不要再往前加,不然就重复

floyd算法--一个人的旅行

2017-07-27 22:37:32 writer:pprp 题目如下: 虽然草儿是个路痴(就是在杭电待了一年多,居然还会在校园里迷路的人,汗~),但是草儿仍然很喜欢旅行,因为在旅途中 会遇见很多人(白马王子,^0^),很多事,还能丰富自己的阅历, 还可以看美丽的风景--草儿想去很多地方,她想要去东京铁塔看夜景,去威尼斯看电影,去阳明山上看海芋,去纽约纯粹看雪景,去巴黎喝咖啡写信, 去北京探望孟姜女--眼看寒假就快到了,这么一大段时间,可不能浪费啊,一定要给自己好好的放个假,可是也不能荒废了训

UVA104Arbitrage(floyd最短路)

UVA104Arbitrage 题目大意: 给你两两国家之间的汇率,要求你从任何一个国家出发,身上带着1(单位不明),然后回到这个国家时,身上的钱能够> 1.01.并且如果这样的路径有多条的话,希望的到的是最短的路径,并且还有要求你输出这个最短的路径. 解题思路: 利用floyd可以求出旅游任何两个国家的可以得到的最大的金钱,可是无法获得最短的路径,最短路径的意思是中转的国家数尽量少.因此需要再加上一维来标记国家i到j,中间经过了p个中间的国家到达(包括i).那么G[i][j][p] = max

Six Degrees of Cowvin Bacon (poj 2139 最短路Floyd)

Language: Default Six Degrees of Cowvin Bacon Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 3288   Accepted: 1529 Description The cows have been making movies lately, so they are ready to play a variant of the famous game "Six Degrees