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. 将问题转换成求两个日 ...
随机推荐
- OkHttp使用教程
Android系统提供了两种HTTP通信类,HttpURLConnection和HttpClient.关于HttpURLConnection和HttpClient的选择>>官方博客尽管Go ...
- Ehcache 整合Spring 使用页面、对象缓存
Ehcache 整合Spring 使用页面.对象缓存 Ehcache在很多项目中都出现过,用法也比较简单.一 般的加些配置就可以了,而且Ehcache可以对页面.对象.数据进行缓存,同时支持集群/分布 ...
- 纯手工打造漂亮的瀑布流,五大插件一个都不少Bootstrap+jQuery+Masonry+imagesLoaded+Lightbox!
前两天写的文章<纯手工打造漂亮的垂直时间轴,使用最简单的HTML+CSS+JQUERY完成100个版本更新记录的华丽转身!>受到很多网友的喜爱,今天特别推出姊妹篇<纯手工打造漂亮的瀑 ...
- HoloLens开发手记 - 测试 Testing
测试HoloLens应用的做法和测试Windows应用很类似.所有常规的内容都应该被考虑在内(功能.互操作性.性能.安全性.可靠性等等),然而有些特性是HoloLens特有的,在PC或者手机上无法测试 ...
- .NET 平台下的插件化开发内核(Rabbit Kernel)
每个程序猿都有一个框架梦,曾经在2013年8月15日写过一篇"Koala Framework是什么?我为什么要写这个框架?"的文章,在开放框架路上迈出了第一步,之后作者如愿找到了一 ...
- windows 内部预览版与迅雷极速版不配合
为了体验bash on ubuntu安装的预览版本,结果原来的迅雷极速版本无法成功下载文件,总是在最后一刻报错退出. 解决方法是: 下载安装迅雷9 哈哈哈哈,新版迅雷挺不错的,运行良好. ctrl^v ...
- 64-who 简明笔记
显示已登录用户的信息 who [options] who am i who程序显示在本地系统上登录的用户的信息.这些信息包括每个用户的用户名.终端设备.登录时间和相应的远程主机名(如果可应用) 参数 ...
- php上传文件
php部分: <?php /* 注释:允许用户上传文件是一个巨大的安全风险. 请仅仅允许可信的用户执行文件上传操作. */ header("Content-type: text/htm ...
- MySQL中的insert ignore into, replace into等的一些用法总结
在MySQL中进行条件插入数据时,可能会用到以下语句,现小结一下.我们先建一个简单的表来作为测试: CREATE TABLE `books` ( `id` INT(11) NOT NULL AUTO_ ...
- Android性能优化文章转载
今天看到几篇比较好的文章就转了!(链接如下) 转载注明出处:Sunzxyong Android性能优化之Bitmap的内存优化 Android性能优化之常见的内存泄漏 Android最佳实践之Syst ...