最短路Floyd——POJ 1125

原创 2016年08月28日 19:18:43
  • 题目链接:
    http://poj.org/problem?id=1125

  • 分析:
    给出N个点,接下来给出N行:该行有num对关系,每对关系给出两个数a,b表示i点到a点的边权重为b。求出一点:从该点出发到达距离它最远的点的距离是最小的。

  • 题解:
    最多100个点,所以直接Floyd,然后遍历一遍即可。

  • AC代码:
    这里写图片描述

/*************************************************************************
    > File Name: test.cpp
    > Author: Akira 
    > Mail: qaq.febr2.qaq@gmail.com 
 ************************************************************************/

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <cstdlib>
#include <algorithm>
#include <queue>
#include <stack>
#include <map>
#include <cmath>
#include <vector>
#include <set>
#include <list>
#include <ctime>
typedef long long LL;
typedef unsigned long long ULL;
typedef long double LD;
#define MST(a,b) memset(a,b,sizeof(a))
#define CLR(a) MST(a,0)
#define Sqr(a) ((a)*(a))
using namespace std;

#define MaxN 101
#define MaxM MaxN*10
#define INF 1000000000
#define bug cout<<88888888<<endl;

int N;
int n; //总点数
int dis[MaxN][MaxN];  //dis[i][j]存储i到j的最短路


void Floyd()
{
    n = N;    //n赋值为图中的点数
    for(int k=1;k<=n;k++)
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
                if(dis[i][j]>dis[i][k]+dis[k][j])
                    dis[i][j]=dis[i][k]+dis[k][j];
}

void init()
{
    for(int i=1;i<=N;i++)
        for(int j=1;j<=N;j++)
            dis[i][j] = INF;
}

int main()
{
    while( cin>>N && N )
    {
        init();
        int num;
        int a,b;
        for(int i=1;i<=N;i++)
        {
            cin >> num;
            for(int j=0;j<num;j++)
            {
                cin >> a >> b;
                dis[i][a] = b;
            }
        }
        Floyd();
        int ans = INF;
        int flag = 0;
        for(int i=1;i<=N;i++)
        {
            int tmp = 0;
            for(int j=1;j<=N;j++)
            {
                if(i == j) continue;

                tmp = tmp > dis[i][j] ? tmp : dis[i][j];
            }
            if(ans > tmp)
            {
                flag = i;
                ans = tmp;
            }

        }
        cout <<flag << " "<< ans << endl;
    }
    system("pause");
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

POJ 1125 Stockbroker Grapevine 【最短路(Floyd算法)】

Description Stockbrokers are known to overreact to rumours. You have been contracted to develop a me...

POJ 1125 Stockbroker Grapevine(最短路&Floyd)

Stockbroker Grapevine http://poj.org/problem?id=1125 Time Limit: 1000MS Memory Limit: 10000K D...

POJ 1125 Stockbroker Grapevine (多源最短路Floyd)

题目链接POJ1125题目大意有N个股票经济人可以互相传递消息,他们之间存在一些单向的通信路径。现在有一个消息要由某个人开始传递给其他所有人,问应该由哪一个人来传递,才能在最短时间内让所有人都接收到消...

POJ 1125 - Stockbroker Grapevine(最短路`Floyd)

Description Stockbrokers are known to overreact to rumours. You have been contracted to develop a...

poj 1125 Stockbroker Grapevine (Floyd最短路)【模板】

Stockbrokers are known to overreact to rumours. You have been contracted to develop a method of spre...

【最短路】poj1125 Floyd

题意:翻译来自scy Description 给出一个有向图,n个点,每个点都有一些直接相连的点,并且给出边的长度。求设置一个中心点,使得离这个中心点的最远距离最短。 这道题其实和《医院设置》差...

poj 1125 Stockbroker Grapevine——Floyd

Stockbroker Grapevine Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 25234 Accepted: 1...

poj1125——Stockbroker Grapevine(floyd算法)

DescriptionStockbrokers are known to overreact to rumours. You have been contracted to develop a met...

POJ1125Floyd-warshall算法模板题

//题意求出一个Num人并给出该人传递信息到最后一个收到该信息的的时间 //floyd算法模板题 //204K 0MS #include using namespace std; #define ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)