题意:给定N个点,现在要求出从1号点到N号点的最短路。题目给的限制条件就是对于某条路径是不能够走的,但是可以选择某段路径走,另外就是所走的路径的标号必须是递增的。

分析:由于给定的是一些列的坐标点,这也就说原图其实是一个完全图。对于限制路径,其实只要限制的路径上点数超过2,那么明显可以选择从起点直接走到终点这条最短路来代替限制路径,因此该限制不起作用,而对于限制路径上点数为2的路径则需要标记一下不能够取。对于最终路径要求点坐标路径递增这一条件则直接在floyd处理的时候限制好i,j,k三者的关系即可。

#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#define sqr(x) ((x)*(x))
using namespace std; const int N = ;
const double eps = 1e-;
int n, m;
int seq[N];
double mp[N][N]; int sign(const double &x) {
return x < -eps ? - : x > eps ? : ;
} struct Point {
double x, y;
bool operator == (const Point &t) const {
return !sign(x-t.x) && !sign(y-t.y);
}
}p[N]; double dist(int a, int b) {
return sqrt(sqr(p[a].x-p[b].x) + sqr(p[a].y-p[b].y));
} void floyd() {
for (int k = ; k < n; ++k) {
for (int i = ; i < k; ++i) {
if (!sign(mp[i][k]+)) continue;
for (int j = k+; j < n; ++j) {
if (!sign(mp[k][j]+)) continue;
if (!sign(mp[i][j]+) || sign(mp[i][j]-(mp[i][k]+mp[k][j])) > ) {
mp[i][j] = mp[i][k] + mp[k][j];
}
}
}
}
} int main() {
while (scanf("%d %d", &n, &m), n|m) {
for (int i = ; i < n; ++i) {
for (int j = ; j < n; ++j) mp[i][j] = ;
scanf("%lf %lf", &p[i].x, &p[i].y);
}
int t;
for (int i = ; i < m; ++i) {
scanf("%d", &t);
for (int j = ; j < t; ++j) {
scanf("%d", &seq[j]);
}
if (t == && !(p[seq[]-] == p[seq[]-])) {
mp[seq[]-][seq[]-] = mp[seq[]-][seq[]-]= -;
}
}
for (int i = ; i < n; ++i) {
for (int j = i+; j < n; ++j) {
if (sign(mp[i][j]+)) mp[i][j] = mp[j][i] = dist(i, j);
}
}
floyd();
if (sign(mp[][n-]+)) printf("%.2f\n", mp[][n-]);
else puts("Can not be reached!");
}
return ;
}

HDU-4511 小明系列故事——女友的考验 floyd变种-标号递增最短路的更多相关文章

  1. HDU 4511 小明系列故事——女友的考验 (AC自动机+DP)

    小明系列故事——女友的考验 Time Limit: 500/200 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total ...

  2. HDU 4511 小明系列故事——女友的考验 (AC自动机 + DP)

    小明系列故事——女友的考验 Time Limit: 500/200 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total ...

  3. HDU - 4511 小明系列故事――女友的考验(AC自己主动机+DP)

    Description 最终放寒假了,小明要和女朋友一起去看电影.这天,女朋友想给小明一个考验,在小明正准备出发的时候.女朋友告诉他.她在电影院等他,小明过来的路线必须满足给定的规则:  1.如果小明 ...

  4. HDU 4511 小明系列故事——女友的考验 ( Trie图 && DP )

    题意 :  给出编号从1 ~ n 的 n 个平面直角坐标系上的点,求从给出的第一个点出发到达最后一个点的最短路径,其中有两种限制,其一就是只能从编号小的点到达编号大的点,再者不能走接下来给出的 m 个 ...

  5. HDU 4511 小明系列故事——女友的考验 (AC自动机 + DP)题解

    题意:从 1 走到 n,要求所走路径不能出现给定的路径,求最短路 思路:因为要求不能出现给定路径,那么我可以求助ac自动机完成判断. 我们可以在build的时候标记哪些路径不能出现,显然下面这种表示后 ...

  6. HDU4511 小明系列故事——女友的考验 —— AC自动机 + DP

    题目链接:https://vjudge.net/problem/HDU-4511 小明系列故事——女友的考验 Time Limit: 500/200 MS (Java/Others)    Memor ...

  7. 小明系列故事――女友的考验 HDU - 4511 AC自动机+简单DP

    题意:自己看题目,中文体面. 题解: 把所有不能走的路径放入AC自动机中. 然后DP[i][j]表示走到 i 这个点,且位于AC自动机 j 这个节点最短距离 然后直接DP即可.注意一点会爆int #i ...

  8. HDU4511 小明系列故事——女友的考验(AC自动机 + DP)

    题目大概说有平面有n个点,从1点出发走到n点,每一步只能走到序号比当前更大的点且走的序列不能包含给定的m个序列中的任何一个,问1走到n的最短路. 用m个序列建个AC自动机,后缀包含整个序列的结点标记一 ...

  9. hdu4511小明系列故事——女友的考验(ac自动机+最短路)

    链接 预处理出来任意两点的距离,然后可以顺着trie树中的节点走,不能走到不合法的地方,另开一维表示走到了哪里,依次来更新. 注意判断一下起点是不是合法. #include <iostream& ...

随机推荐

  1. frameset子窗口获取父窗口失败原因?

    报错信息: arrow.html:44 Uncaught SecurityError: Blocked a frame with origin "null" from access ...

  2. Caused by: org.hibernate.HibernateException: Connection cannot be null when 'hibernate.dialect' not set

    docs.jboss.org文档示例代码:(http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/) sta ...

  3. error:could not open D:\java\jre1.8\lib\i386\jvm.cfg

    复制一份jre到eclipse的目录下就可以了.

  4. Linux批量修改用户密码

    对系统定期修改密码是一个很重要的安全常识,通常,我们修改用户密码都使用passwd user这样的命名来修改密码,但是这样会进入交互模式,即使使用脚本也不能很方便的批量修改,除非使用expect这样的 ...

  5. Git的搭建和使用技巧完整精华版

    [Git使用技巧] 1.把一个已经存在于版本库中的文件加入忽略提交文件(.gitignore)中,需要如下代码: git rm --cached [文件路径] 例如: git rm --cached  ...

  6. Spark函数

    这张图不错!

  7. linux之eventfd()

    参考:http://www.man7.org/linux/man-pages/man2/eventfd.2.html 一.简介 简单来说,这个函数就是创建一个用于事件通知的文件描述符.它类似于pipe ...

  8. C#常用扩展方法

    /// <summary> /// 转换 /// </summary> public static class ConversionHelper { #region 数据格式转 ...

  9. Failed to start component [StandardEngine[Catalina].StandardHost[localhost....

    今天我用了近一天的时间研究一个错误,早上写代码是遇到一个 错误严重错误代码如下: 严重: ContainerBase.addChild: start: org.apache.catalina.Life ...

  10. reactjs入门到实战(五)---- props详解

    1>>>基础的props使用     不可修改父属性    getDefaultProps   对于外界/父组件的属性值,无法直接修改,它是只读的. <script type= ...