题意:

     给你一个无向图,给你两组起点和终点,问你这两组起点和终点的最短路上最多有多少个交点...

思路:

     开一个数组dp[i][j]记录最短路上i,j之间的点有多少个,这个数组是根据map[][]数组

更新的时候更新的,在floyd里,当map[i][j] > map[i][k] + map[k][j] 时,

map[i][j] = map[i][k] + map[k][j] 同时 dp[i][j] = dp[i][k] + dp[k][j] - 1;

值得注意的是只有当i,j都是最短路上的点的时候dp[i][j]才有意义,否则里面的数字没意义,跑完Floyd以后dp里面的数组也就更新好了,然后暴力枚举每一条同时都在两条最短路上的点,取最大的那个就行了,提示:

当 map[s0][i] + map[i][j] + map[j][e0] == map[s0][e0] 

&&map[s1][i] + map[i][j] + mao[j][e1] == map[s1][e1] 的时候就说明i,j这两个点同时在两条最短路上.则 ans = maxx(ans ,dp[i][j]);



#include<stdio.h>
#include<string.h> #define N 300 + 50
#define INF 1000000000

int
map[N][N];
int
dp[N][N]; void Floyd(int n)
{
for(int
k = 1 ;k <= n ;k ++)
for(int
i = 1 ;i <= n ;i ++)
for(int
j = 1 ;j <= n ;j ++)
{
if(
map[i][j] > map[i][k] + map[k][j])
{

map[i][j] = map[i][k] + map[k][j];
dp[i][j] = dp[i][k] + dp[k][j] - 1;
}
}
return ;
} bool
ok(int s0 ,int e0 ,int s1 ,int e1 ,int i ,int j)
{
return
map[s0][i] + map[i][j] + map[j][e0] == map[s0][e0]
&&
map[s1][i] + map[i][j] + map[j][e1] == map[s1][e1];
} int main ()
{
int
n ,m ,i ,j;
int
a ,b ,c;
int
s0 ,s1 ,e1 ,e0;
while(~
scanf("%d %d" ,&n ,&m) && n + m)
{
for(
i = 1 ;i <= n ;i ++)
{
for(
j = i + 1 ;j <= n ;j ++)
map[i][j] = map[j][i] = INF ,dp[i][j] = 0;
map[i][i] = 0 ,dp[i][i] = 1;
} for(
i = 1 ;i <= m ;i ++)
{

scanf("%d %d %d" ,&a ,&b ,&c);
if(
map[a][b] > c) map[a][b] = map[b][a] = c;
dp[a][b] = dp[b][a] = 2;
}
scanf("%d %d %d %d" ,&s0 ,&e0 ,&s1 ,&e1);
Floyd(n);
int
ans = 0;
for(
i = 1 ;i <= n ;i ++)
for(
j = 1 ;j <= n ;j ++)
if(
ok(s0 ,e0 ,s1 ,e1 ,i ,j) && ans < dp[i][j])
ans = dp[i][j];
printf("%d\n" ,ans);
}
return
0; }

hdu2833 Floyd + dp的更多相关文章

  1. UVA10269 Adventure of Super Mario(Floyd+DP)

    UVA10269 Adventure of Super Mario(Floyd+DP) After rescuing the beautiful princess, Super Mario needs ...

  2. luogu1850 [NOIp2016]换教室 (floyd+dp)

    首先floyd求出每两点间的距离(注意自己到自己的距离要设成0) 然后就是dp了 一开始照着Lifeguards的样子,钦定了一下i这个点一定要选,然后发现复杂度不对,还想了好长时间优化 然后一翻题解 ...

  3. AOJ 2200 Mr. Rito Post Office (floyd+DP)

    题意: 快递到了:你是某个岛国(ACM-ICPC Japan)上的一个苦逼程序员,你有一个当邮递员的好基友利腾桑遇到麻烦了:全岛有一些镇子通过水路和旱路相连,走水路必须要用船,在X处下船了船就停在X处 ...

  4. UVa 10269 Adventure of Super Mario (Floyd + DP + BFS)

    题意:有A个村庄,B个城市,m条边,从起点到终点,找一条最短路径.但是,有一种工具可以使人不费力的移动L个长度,但始末点必须是城市或村庄.这种工具有k个,每个只能使用一次,并且在城市内部不可使用,但在 ...

  5. ZOJ 1232 Adventure of Super Mario (Floyd + DP)

    题意:有a个村庄,编号为1到a,有b个城堡,编号为a+1到a+b.现在超级玛丽在a+b处,他的家在1处.每条路是双向的,两端地点的编号以及路的长度都已给出.路的长度和通过所需时间相等.他有一双鞋子,可 ...

  6. codeforces 1204C Anna, Svyatoslav and Maps(floyd+dp)

    题目链接:http://codeforces.com/problemset/problem/1204/C 给定一组序列,P1,P2,P3...Pm,这是一组合法路径的序列,即任意的Pi和Pi+1之间有 ...

  7. ACM: HDU 5418 Victor and World - Floyd算法+dp状态压缩

    HDU 5418 Victor and World Time Limit:2000MS     Memory Limit:131072KB     64bit IO Format:%I64d & ...

  8. ZOJ 1232 【灵活运用FLOYD】 【图DP】

    题意: copy自http://blog.csdn.net/monkey_little/article/details/6637805 有A个村子和B个城堡,村子标号是1~A,城堡标号是A+1~B.马 ...

  9. poj3311 TSP经典状压dp(Traveling Saleman Problem)

    题目链接:http://poj.org/problem?id=3311 题意:一个人到一些地方送披萨,要求找到一条路径能够遍历每一个城市后返回出发点,并且路径距离最短.最后输出最短距离即可.注意:每一 ...

随机推荐

  1. springboot整合jsp,完成公交车站路线图

    转: springboot整合jsp,完成公交车站路线图 点赞再看,养成习惯 开发环境: jdk 8 intellij idea tomcat 8 mysql 5.7 maven 3.6 所用技术: ...

  2. POJ-3080(KMP+多个字符串的最长公共子串)

    Blue Jeans HDOJ-3080 本题使用的是KMP算法加暴力解决 首先枚举第一个字符串的所有子串,复杂度为O(60*60),随后再将每个子串和所有剩下的m-1个字符串比较,看是否存在这个子串 ...

  3. OpenGL光照贴图

    一:啥叫贴图 上一节中,我们将整个物体的材质定义为一个整体,但现实世界中的物体通常并不只包含有一种材质,而是由多种材质所组成. 拓展之前的系统,引入漫反射和镜面光贴图(Map).这允许我们对物体的漫反 ...

  4. 『力荐汇总』这些 VS Code 快捷键太好用,忍不住录了这34张gif动图

    之前写过三篇文章,收获了极其不错的阅读量与转发量: 你真的会用 VS Code 的 Ctrl.Shift和Alt吗?高效易用的快捷键:多光标.跳转引用等轻松搞定 VS Code 中的 Vim 操作 | ...

  5. salesforce零基础学习(一百零一)如何了解你的代码得运行上下文

    本篇参考:https://developer.salesforce.com/docs/atlas.en-us.228.0.apexcode.meta/apexcode/apex_enum_System ...

  6. python3 中post处理json 数据

    使用详情如下 import json import requests headers = { "User-Agent": "Mozilla/5.0 (Windows NT ...

  7. 漫漫Java路1—基础知识3—数据类型和变量作用域以及常量

    强类型语言 所有变量定义后才能使用,区别于js等弱类型语言 数据类型分类 基本类型(primitive type) 引用类型(reference type) 整数类 byte:占1字节 short:占 ...

  8. Netty源码 reactor 模型

    翻阅源码时,我们会发现netty中很多方法的调用都是通过线程池的方式进行异步的调用, 这种  eventLoop.execute 方式的调用,实际上便是reactor线程.对应项目中使用广泛的NioE ...

  9. CSS-clear属性的作用

    1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="U ...

  10. C#无边框窗体拖动代码

    1.重写 protected override void WndProc(ref Message m) { if (m.Msg == 163 && this.ClientRectang ...