zoukankan      html  css  js  c++  java
  • [luoguP1027] Car的旅行路线(Floyd)

    传送门

    建图麻烦,建完图搞一遍Floyd就好了。

    ——代码

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cmath>
     4 
     5 using namespace std;
     6 
     7 int n, s, a, b;
     8 int t, x[401][5], y[402][5], T[401];
     9 double map[401][401], ans;
    10 
    11 inline int square(int ax)
    12 {
    13     return ax * ax;
    14 }
    15 
    16 inline int dis(int ax, int ay, int bx, int by)
    17 {
    18     return square(ax - bx) + square(ay - by);
    19 }
    20 
    21 int main()
    22 {
    23     int i, j, k;
    24     scanf("%d", &n);
    25     while(n--)
    26     {
    27         scanf("%d %d %d %d", &s, &t, &a, &b);
    28         for(i = 0; i < 4 * s; i++)
    29          for(j = 0; j < 4 * s; j++)
    30           map[i][j] = 1000000;
    31         ans = 1000000;
    32         for(i = 0; i < s; i++)
    33         {
    34             scanf("%d %d %d %d %d %d %d", &x[i][1], &y[i][1], &x[i][2], &y[i][2], &x[i][3], &y[i][3], &T[i]);
    35             if(dis(x[i][1], y[i][1], x[i][2], y[i][2]) > dis(x[i][3], y[i][3], x[i][2], y[i][2])
    36             && dis(x[i][1], y[i][1], x[i][2], y[i][2]) > dis(x[i][3], y[i][3], x[i][1], y[i][1]))
    37             {
    38                 x[i][4] = x[i][1] + x[i][2] - x[i][3];
    39                 y[i][4] = y[i][1] + y[i][2] - y[i][3];
    40             }
    41             else if(dis(x[i][1], y[i][1], x[i][3], y[i][3]) > dis(x[i][3], y[i][3], x[i][2], y[i][2])
    42                  && dis(x[i][1], y[i][1], x[i][3], y[i][3]) > dis(x[i][2], y[i][2], x[i][1], y[i][1]))
    43                  {
    44                      x[i][4] = x[i][1] + x[i][3] - x[i][2];
    45                      y[i][4] = y[i][1] + y[i][3] - y[i][2];
    46                  }
    47             else if(dis(x[i][2], y[i][2], x[i][3], y[i][3]) > dis(x[i][3], y[i][3], x[i][1], y[i][1])
    48                  && dis(x[i][2], y[i][2], x[i][3], y[i][3]) > dis(x[i][2], y[i][2], x[i][1], y[i][1]))
    49                  {
    50                      x[i][4] = x[i][2] + x[i][3] - x[i][1];
    51                      y[i][4] = y[i][2] + y[i][3] - y[i][1];
    52                   }
    53             map[4 * i][4 * i + 1] = map[4 * i + 1][4 * i] = sqrt(dis(x[i][1], y[i][1], x[i][2], y[i][2])) * T[i];
    54             map[4 * i][4 * i + 2] = map[4 * i + 2][4 * i] = sqrt(dis(x[i][1], y[i][1], x[i][3], y[i][3])) * T[i];
    55             map[4 * i][4 * i + 3] = map[4 * i + 3][4 * i] = sqrt(dis(x[i][1], y[i][1], x[i][4], y[i][4])) * T[i];
    56             map[4 * i + 1][4 * i + 2] = map[4 * i + 2][4 * i + 1] = sqrt(dis(x[i][2], y[i][2], x[i][3], y[i][3])) * T[i];
    57             map[4 * i + 1][4 * i + 3] = map[4 * i + 3][4 * i + 1] = sqrt(dis(x[i][2], y[i][2], x[i][4], y[i][4])) * T[i];
    58             map[4 * i + 2][4 * i + 3] = map[4 * i + 3][4 * i + 2] = sqrt(dis(x[i][3], y[i][3], x[i][4], y[i][4])) * T[i];
    59             for(j = 0; j < 4 * i; j++)
    60              for(k = 4 * i; k < 4 * i + 4; k++)
    61               map[k][j] = map[j][k] = sqrt(dis(x[j / 4][j % 4 + 1], y[j / 4][j % 4 + 1], x[k / 4][k % 4 + 1], y[k / 4][k % 4 + 1])) * t;
    62         }
    63         for(i = 0; i < 4 * s; i++) map[i][i] = 0;
    64         for(k = 0; k < 4 * s; k++)
    65          for(i = 0; i < 4 * s; i++)
    66           for(j = 0; j < 4 * s; j++)
    67            map[i][j] = min(map[i][j], map[i][k] + map[k][j]);
    68         for(i = 4 * a - 4; i < 4 * a; i++)
    69          for(j = 4 * b - 4; j < 4 * b; j++)
    70           ans = min(ans, map[i][j]);
    71         printf("%.1f
    ", ans);
    72     }
    73     return 0;
    74 }
    View Code
  • 相关阅读:
    Hive 使用问题集锦
    scala def/val/lazy val区别以及call-by-name和call-by-value
    spark学习流程
    Hadoop
    Hive
    Chrome快捷键
    Java API帮助文档
    Java 访问修饰符与非访问修饰符
    java 关键字
    Solr配置Ikanalyzer分词器
  • 原文地址:https://www.cnblogs.com/zhenghaotian/p/6813118.html
Copyright © 2011-2022 走看看