hihoCoder #1379 Emulator
hihoCoder Challenge 23, Prob. A
时间限制:5000ms
单点时限:1000ms
内存限制:256MB
描述
有一个$n$个点的无向正权图$G$,这个图是连通的,小Y知道这些点两两之间的最短路的长度。
小J想要构造一个新的无向正权图$G'$,使得新图中两两之间的最短路的长度与原图一样,并且边数最少。
输入
第一行一个整数$n$,表示点的个数。
接下来$n$行,每行$n$个整数。第$i$行第$j$个整数表示$i$点到$j$点的在$G$中的最短路长度,保证合法。
$1\le n \le 300$,保证图$G$中最短路长度不超过$10^9$。
输出
一个整数表示新图$G'$的最小的边数。
样例输入
4
0 1 3 6
1 0 2 5
3 2 0 3
6 5 3 0
样例输出
3
Solution
这道题现场卡住了.
首先由题目描述可知原图$G$是连通图.
设$G=G(V,E)$, 现在不知道边集$E$, 只知道最短路矩阵$D$.
先考虑一个简化问题:
对于某条给定的边$(u,v)$, 能否从最短路矩阵判断它是否必需 ("必需"即一定存在于原图中), 如果能, 如何判断?
能. 判断方法: 判断是否 $\exists x \in V \setminus$ ${u, v}$使得$D_{u,v}=D_{u,x}+D_{x,v}$.
证明:
$\forall (u,v) \in E$, 用$w(u,v)$表示边$(u,v)$的长度. 显然$w(u,v) \ge D_{u,v}$. 又依题意, $\forall (u,v), \ w(u,v)>0$.
$D_{u,v}=D_{u,x}+D_{x,v}$ $\Longrightarrow w(u,v) < D_{u,x}, \ w(u, v) < D_{x, v}$.
$\Longrightarrow u \to x, \ x \to v$ 的最短路都一定不包含边 $(u,v)$. (这好像很显然:))
这样就可以放心地将边$(u,v)$从图$G$中删除, 而最短路矩阵不变.
这样就可以得出一个迭代的算法. 而且可以推出:
对于给定的最短路矩阵$D$, 与之对应的边数最少的图是唯一的.
思维链条:
某条边$(u,v)$是否必需由最短路矩阵$D$唯一确定 $\to$ 删去非必需的边后最短路矩阵$D$不变 $\to$ 删掉的边是"独立"的, 互不影响.
删边的独立性直白地说即是:只有当图$G$中存在一条能替代$(u,v)$这条边的路径时才把$(u,v)$删除。
Implementation
#include <bits/stdc++.h>
using namespace std;
const int N=305;
int d[N][N];
int main(){
int n;
cin>>n;
for(int i=0; i<n; i++)
for(int j=0; j<n; j++)
cin>>d[i][j];
int res=n*(n-1)/2;
for(int i=0; i<n; i++)
for(int j=i+1; j<n; j++){
for(int k=0; k<n; k++){
if(k!=i && k!=j && d[i][j]==d[i][k]+d[k][j]){
--res;
break;
}
}
}
cout<<res<<endl;
return 0;
}
hihoCoder #1379 Emulator的更多相关文章
- hihoCoder挑战赛23
hihoCoder挑战赛23 A.Emulator 题意 给一张图,有\(N(N \le 300)\)个点, 给出任意两点之间的最短路. 求最多可以去掉多少条边,使得任意两点的最短路长度不变. 思路 ...
- Visual Studio Emulator for Android 初体验
Visual Studio Emulator for Android已经推出一段时间了,但一直没有用过.前两天下载安装用了下,整体感觉比谷歌自带的模拟器强多了.Visual Studio Emulat ...
- hihocoder -1121-二分图的判定
hihocoder -1121-二分图的判定 1121 : 二分图一•二分图判定 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 大家好,我是小Hi和小Ho的小伙伴Net ...
- Hihocoder 太阁最新面经算法竞赛18
Hihocoder 太阁最新面经算法竞赛18 source: https://hihocoder.com/contest/hihointerview27/problems 题目1 : Big Plus ...
- hihoCoder太阁最新面经算法竞赛15
hihoCoder太阁最新面经算法竞赛15 Link: http://hihocoder.com/contest/hihointerview24 题目1 : Boarding Passes 时间限制: ...
- 【hihoCoder 1454】【hiho挑战赛25】【坑】Rikka with Tree II
http://hihocoder.com/problemset/problem/1454 调了好长时间,谜之WA... 等我以后学好dp再来看为什么吧,先弃坑(╯‵□′)╯︵┻━┻ #include& ...
- 【hihocoder#1413】Rikka with String 后缀自动机 + 差分
搞了一上午+接近一下午这个题,然后被屠了个稀烂,默默仰慕一晚上学会SAM的以及半天4道SAM的hxy大爷. 题目链接:http://hihocoder.com/problemset/problem/1 ...
- [Android] Visual Studio Emulator For Android 相关
1.修改设备名 C:\Users\[用户名]\AppData\Local\Microsoft\VisualStudioEmulator\Android\Containers\Local\Devices ...
- 【hihoCoder】1148:2月29日
问题:http://hihocoder.com/problemset/problem/1148 给定两个日期,计算这两个日期之间有多少个2月29日(包括起始日期). 思路: 1. 将问题转换成求两个日 ...
随机推荐
- Windbg调优Kafka.Client内存泄露
从来没写过Blog,想想也是,工作十多年了,搞过N多的架构.技术,不与大家分享实在是可惜了.另外,从传统地ERP行业转到互联网,也遇到了很所前所未有的问题,原来知道有一些坑,但是不知道坑太多太深.借着 ...
- Android引导指示层的制作 (ViewStub + SharePreference)
引导指示界面是个什么鬼东西?一张图即明了:
- Button、ImageButton及ImageView详解
Button.ImageButton及ImageView详解 在应用程序开发过程中,很多时候需要将View的background或者src属性设置为图片,即美观又支持点击等操作.常见的有Button. ...
- Bootstrap系列 -- 44. 分页导航
带页码的分页导航,可能是最常见的一种分页导航,特别是在列表页内容超多的时候,会给用户提供分页的导航方式.平时很多同学喜欢用div>a和div>span结构来制作带页码的分页导航.不过,在B ...
- 东大OJ-1430-PrimeNumbers
题目描述 I'll give you a number , please tell me how many different prime factors in this number. 输入 The ...
- MVC认知路【点点滴滴支离破碎】【三】----IIS7.5上部署MVC4.0
发布web到iis不能运行Google ----- ╲ http://stackoverflow.com/questions/12057540/installing-asp-net-mvc-4-o ...
- 46-df 显示磁盘空间的使用情况
显示磁盘空间的使用情况 df [options] [filesystem-list] 参数 当不带任何参数调用df时,用户将获得本地系统上每个挂载设备的空闲空间 filesystem-list是一个或 ...
- SpringMVC使用@PathVariable,@RequestBody,@ResponseBody,@RequestParam,@InitBinder
@Pathvariable public ResponseEntity<String> ordersBack( @PathVariable String reqKey, ...
- Shell命令_awk命令
# awk '条件1{动作1} 条件2{动作2}-' 文件名 条件( Pattern): 一般使用关系表达式作为条件 x > 10 判断变量 x是否大于10 x>=10 大于等于 x< ...
- 详解jQ的support模块
jQuery的属性support是判断浏览器之间是否兼容的模块 ,该模块包含了leadingWhitespace,tbody,htmlSerialize,style,hrefNormalized,op ...