hdu2833 Floyd + dp
题意:
给你一个无向图,给你两组起点和终点,问你这两组起点和终点的最短路上最多有多少个交点...
思路:
开一个数组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的更多相关文章
- UVA10269 Adventure of Super Mario(Floyd+DP)
UVA10269 Adventure of Super Mario(Floyd+DP) After rescuing the beautiful princess, Super Mario needs ...
- luogu1850 [NOIp2016]换教室 (floyd+dp)
首先floyd求出每两点间的距离(注意自己到自己的距离要设成0) 然后就是dp了 一开始照着Lifeguards的样子,钦定了一下i这个点一定要选,然后发现复杂度不对,还想了好长时间优化 然后一翻题解 ...
- AOJ 2200 Mr. Rito Post Office (floyd+DP)
题意: 快递到了:你是某个岛国(ACM-ICPC Japan)上的一个苦逼程序员,你有一个当邮递员的好基友利腾桑遇到麻烦了:全岛有一些镇子通过水路和旱路相连,走水路必须要用船,在X处下船了船就停在X处 ...
- UVa 10269 Adventure of Super Mario (Floyd + DP + BFS)
题意:有A个村庄,B个城市,m条边,从起点到终点,找一条最短路径.但是,有一种工具可以使人不费力的移动L个长度,但始末点必须是城市或村庄.这种工具有k个,每个只能使用一次,并且在城市内部不可使用,但在 ...
- ZOJ 1232 Adventure of Super Mario (Floyd + DP)
题意:有a个村庄,编号为1到a,有b个城堡,编号为a+1到a+b.现在超级玛丽在a+b处,他的家在1处.每条路是双向的,两端地点的编号以及路的长度都已给出.路的长度和通过所需时间相等.他有一双鞋子,可 ...
- codeforces 1204C Anna, Svyatoslav and Maps(floyd+dp)
题目链接:http://codeforces.com/problemset/problem/1204/C 给定一组序列,P1,P2,P3...Pm,这是一组合法路径的序列,即任意的Pi和Pi+1之间有 ...
- ACM: HDU 5418 Victor and World - Floyd算法+dp状态压缩
HDU 5418 Victor and World Time Limit:2000MS Memory Limit:131072KB 64bit IO Format:%I64d & ...
- ZOJ 1232 【灵活运用FLOYD】 【图DP】
题意: copy自http://blog.csdn.net/monkey_little/article/details/6637805 有A个村子和B个城堡,村子标号是1~A,城堡标号是A+1~B.马 ...
- poj3311 TSP经典状压dp(Traveling Saleman Problem)
题目链接:http://poj.org/problem?id=3311 题意:一个人到一些地方送披萨,要求找到一条路径能够遍历每一个城市后返回出发点,并且路径距离最短.最后输出最短距离即可.注意:每一 ...
随机推荐
- [个人总结]pytorch中用checkpoint设置恢复,在恢复后的acc上升
原因是因为checkpoint设置好的确是保存了相关字段.但是其中设置的train_dataset却已经走过了epoch轮,当你再继续训练时候,train_dataset是从第一个load_data开 ...
- 01----python入门----python安装与初识
----python入门----python安装与初识 python是一门编程语言,作为学习python的开始,需要事先搞明白:编程的目的是什么?什么是编程语言?什么是编程? 这是一个很好的开头!但是 ...
- SQL-MYSQL的时间格式转换(持续补充)
======================SQLSERVER===================================== SELECT CONVERT(varchar(100), GE ...
- drozer使用总结
adb forward tcp:31415 tcp:31415 drozer console connect run app.package.list -f baidu 查看包名 run a ...
- 【linux】驱动-1-环境准备
目录 前言 1. 开发环境搭建 1.1 环境准备 1.1.1 安装工具 1.1.2 编译内核 1.1.2.1 获取内核源码 1.1.2.2 编译内核 1.2 内核驱动模块编译和加载 1.2.1 hel ...
- All I know about A/B Test (1) : 均值型指标与比值(率)型指标的计算区别
因为最近在找实习,所以打算把自己之前学过的关数据分析的知识总结(复习)一下.在总结A/B test时,我发现中文互联网中关于A/B test的总结已经很多了,但是对于均值型指标和比值(率)型指标在设计 ...
- asp.net core 2.0 web api + Identity Server 4 + angular 5 可运行前后台源码
前台使用angular 5, 后台是asp.net core 2.0 web api + identity server 4. 从头编写asp.net core 2.0 web api 基础框架: 第 ...
- Android Studio 之 Button(圆角,描边,按压效果)
•普通Button <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns: ...
- 认识Python解释器和PyCharm编辑器
(1)安装Python解释器 Python官网:https://www.python.org/ 下载对应机器(Windows/Mac)的安装包: 百度网盘地址: 链接:https://pan.baid ...
- 「HTML+CSS」--自定义加载动画【009】
前言 Hello!小伙伴! 首先非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出- 哈哈 自我介绍一下 昵称:海轰 标签:程序猿一只|C++选手|学生 简介:因C语言结识编程,随后转入计算机 ...