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 题意:一个人到一些地方送披萨,要求找到一条路径能够遍历每一个城市后返回出发点,并且路径距离最短.最后输出最短距离即可.注意:每一 ...
随机推荐
- 记录PHP post提交表单导入mysql中文乱码的问题
记录记录PHP post提交表单导入mysql中文乱码的问题 关于乱码,这是个糟糕的问题!涉及到很多地方 解决思路:程序所涉及的环境字符集不一致导致 mysql出现乱码一般是mysql数据库内部的字符 ...
- Tomcat后台爆破指南
0x00 实验环境 攻击机:Win 10 0x01 爆破指南 针对某Tomcat默认管理页面: (1)这里主要是介绍一种比较好用的burp爆破方法: 点击Tomcat后台管理链接 Tomc ...
- Educational Codeforces Round 98 (Rated for Div. 2)
A 如果\(n = m\),答案为\(2 \times n\):如果\(n \ne m\),答案为\(2 \times max(n,m) - 1\) #include <bits/stdc++. ...
- super_curd组件技术点总结
1.基于包的导入的方式实现单例模式 # test1.py class AdminSite(object): def __init__(self): self.registry = {} self.ap ...
- FreeBSD 虚拟网卡 网桥 路由 映射
网关与路由 netstat -r Routing tables #路由表 Destination Gateway Flags Refs Use Netif Expire 目的地 网关 状态 接口 超时 ...
- Apache配置 9.访问控制-Diretory\FileMatch
(1)介绍 访问控制限制白名单IP,针对文件和目录. (2)目录配置 #vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf <Virtua ...
- 2019 GDUT Rating Contest I : Problem A. The Bucket List
题面: A. The Bucket List Input file: standard input Output file: standard output Time limit: 1 second Me ...
- Spring(一):Spring概述及相关概念
Spring简介 Spring主要作用是用来解耦,降低代码之间的耦合度.根据功能的不同,可以将系统的代码分为主业务逻辑与系统服务逻辑. 主业务逻辑之间代码联系紧密,相互调用较多,复用性相对较低: 系统 ...
- C#无边框窗体拖动代码
1.重写 protected override void WndProc(ref Message m) { if (m.Msg == 163 && this.ClientRectang ...
- D8016 “/ZI”和“/Gy-”命令行选项不兼容
老版本vs项目升级到vs2017后遇到编译报错: /ZI选项在: /Gy- 选项在: 修改'/ZI'选项为'无' 或者 '/Gy-' 修改为'/Gy'