HDU1690(Floyd)

一开始我以为直线上怎么会有最短距离,后来发现每两点之间直接到和间接到达的距离一样的,比如 1 ->2->3 = 1->2+2->3但是不等于1->3的直接距离

建完图以后直接Floyd就行,还有就是long long 会WA ,用__int64

#include <iostream>
#include <string.h>
#include <queue>
#include <vector>
#include <utility>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

#define maxn 1200
#define LL __int64
const LL  INF = 100000000002;
LL sit[maxn];
LL dis[maxn][maxn];
int  main()
{
#ifdef xxz
    freopen("in.txt","r",stdin);
#endif // xxz
    LL Case,L1,L2,L3,L4,C1,C2,C3,C4,n,m,v,T;
    cin>>T;
    Case = 1;
    while(T--)
    {
        cin>>L1>>L2>>L3>>L4>>C1>>C2>>C3>>C4;
        cin>>n>>m;
        for(LL i = 1; i <= n; i++)
        {
            cin>>sit[i];
            dis[i][i] = 0;
            for(LL j = 1; j < i; j++ )
            {
                LL temp = max(sit[i],sit[j]) - min(sit[i],sit[j]);
                if(temp > L4)  v = INF;
                else if(temp > L3) v = C4;
                else if(temp > L2) v= C3;
                else if(temp > L1) v = C2;
                else if(temp > 0) v = C1;
                else v = 0;
                dis[i][j] = dis[j][i] = v;
            }
        }

        for(LL k = 1; k <= n; k++)
            for(LL i = 1; i <= n; i++)
                for(LL j = 1; j<= n; j++)
                {
                    dis[i][j] = min(dis[i][j],dis[i][k] + dis[k][j]);
                }
        printf("Case %d:\n",Case++);
        for(LL i = 0; i < m; i++)
        {
            LL a,b;
            cin>>a>>b;
            if(dis[a][b]== INF ) printf("Station %I64d and station %I64d are not attainable.\n",a,b);
            else printf("The minimum cost between station %I64d and station %I64d is %I64d.\n",a,b,dis[a][b]);
        }
    }
    return 0;
}
时间: 2024-08-03 11:24:54

HDU1690(Floyd)的相关文章

HDU1690(Floyd最短路)

水题直接贴代码 #include <iostream> #include <string.h> #include <queue> #include <vector> #include <utility> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; #define maxn 1200 #define

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

【最短路】求两点间最短路的Floyd算法及其matlab实现

代码来源:<图论算法及其matlab实现>(北京航空航天出版社) P22 此代码返回第一个点和最后一个点之间最短路径,以及最短路径的长度. 代码如下: 1 function [P,u ] = Floyd(W) 2 %W表示权值矩阵 3 %P表示最短路径 4 %u表示最短路的权和 5 n=length(W); 6 U=W; 7 m=1; 8 9 while m<=n %判断是否满足停止条件 10 for i=1:n 11 for j=1:n 12 if U(i,j)>U(i,m)+U

POJ - 2253 Frogger(Floyd最短路+预处理)

题目链接:http://poj.org/problem?id=2253 题意:青蛙要从点1到点2,给出各点的坐标,如果点A到点B可以通过A->C,C->B,A到B的距离可以用A->C和C-B中较长的一边代替(如果A直接到B更短的话就不用了),求点1到点2的最短距离. 题解:本来想用dijkst,但是想想就200的数据量,直接Floyd岂不美滋滋.先预处理一下各点之间的距离.因为取两条边中较长的那条边,所以转移的话,那转移的两条边都要比原来的短才可以. 值得注意的是用C的格式输入的时候要用

Floyd算法 - 最短路径

2017-07-27 22:21:04 writer:pprp 该算法的本质是动态规划,形式简单,复杂度高为O(n^3): d[i][j] = max(d[i][k]+d[k][j],d[i][j]); 采用的基本手段是松弛 适用:解决多源最短路径问题 代码如下: #include <iostream> using namespace std; const int maxn = 200; int n,s,t; int a[maxn+1][maxn+1]; void init() { int m

hdu1874 畅通project续 最短路 floyd或dijkstra或spfa

Problem Description 某省自从实行了非常多年的畅通project计划后.最终修建了非常多路.只是路多了也不好,每次要从一个城镇到还有一个城镇时,都有很多种道路方案能够选择.而某些方案要比还有一些方案行走的距离要短非常多.这让行人非常困扰. 如今,已知起点和终点.请你计算出要从起点到终点,最短须要行走多少距离. Input 本题目包括多组数据,请处理到文件结束. 每组数据第一行包括两个正整数N和M(0< N<200,0 < M<1000),分别代表现有城镇的数目和已