HDU 4034 Graph:反向floyd
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4034
题意:
有一个有向图,n个节点。给出两两节点之间的最短路长度,问你原图至少有多少条边。
如果无解,输出"impossible"。
题解:
因为在floyd中:
if(dis[i][k] + dis[k][j] < dis[i][j])
dis[i][j] = dis[i][k] + dis[k][j];
所以对于原图再跑一遍floyd。
如果出现dis[i][k] + dis[k][j] < dis[i][j]的情况,则给出的邻接矩阵不是最短路,无解。
对于三个点i,j,k,如果有dis[i][j] == dis[i][k] + dis[k][j],则(i,j)这条边一定可以舍去。
因为如果其他的最短路径要用到(i,j)边的话,用(i,k)+(k,j)边替换也是可以的。
所以在floyd中顺便统计下就可以了。
AC Code:
#include <iostream>
#include <stdio.h>
#include <string.h>
#define MAX_N 105 using namespace std; int n,t,cas;
int dis[MAX_N][MAX_N];
bool vis[MAX_N][MAX_N]; void read()
{
cin>>n;
for(int i=;i<=n;i++)
{
for(int j=;j<=n;j++)
{
cin>>dis[i][j];
}
}
} int floyd()
{
memset(vis,false,sizeof(vis));
int cnt=n*(n-);
for(int k=;k<=n;k++)
{
for(int i=;i<=n;i++)
{
for(int j=;j<=n;j++)
{
if(i!=j && j!=k && i!=k)
{
if(dis[i][k]+dis[k][j]<dis[i][j]) return -;
if(dis[i][k]+dis[k][j]==dis[i][j] && !vis[i][j])
{
vis[i][j]=true;
cnt--;
}
}
}
}
}
return cnt;
} void work()
{
int ans=floyd();
cout<<"Case "<<cas<<": ";
if(ans==-) cout<<"impossible"<<endl;
else cout<<ans<<endl;
} int main()
{
cin>>t;
for(cas=;cas<=t;cas++)
{
read();
work();
}
}
HDU 4034 Graph:反向floyd的更多相关文章
- HDU 4034 Graph(Floyd变形——逆向判断)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4034 Problem Description Everyone knows how to calcu ...
- HDU 4034 Graph Floyd最短路
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=4034 题意: 给你一个最短路的表,让你还原整个图,并使得边最少 题解: 这样想..这个表示通过floy ...
- hdu 4034 Graph (floyd的深入理解)
Graph Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65768/65768 K (Java/Others)Total Submi ...
- HDU 4034 Graph(floyd,最短路,简单)
题目 一道简单的倒着的floyd. 具体可看代码,代码可简化,你有兴趣可以简化一下,就是把那个Dijsktra所实现的功能放到倒着的floyd里面去. #include<stdio.h> ...
- hdu 4034 Graph(逆向floyd)
floyd的松弛部分是 g[i][j] = min(g[i][j], g[i][k] + g[k][j]);也就是说,g[i][j] <= g[i][k] + g[k][j] (存在i-> ...
- hdu 4034 Graph floyd
题目链接 给出一个有向图各个点之间的最短距离, 求出这个有向图最少有几条边, 如果无法构成图, 输出impossible. folyd跑一遍, 如果dp[i][j] == dp[i][k]+dp[k] ...
- hdu 4034 Graph
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4034 题目分类:图论 题意:n个顶点,然后给出从i到j的最短路径长度,求至少需要哪些边 第二组样例 第 ...
- Graph(Floyd)
http://acm.hdu.edu.cn/showproblem.php?pid=4034 Graph Time Limit: 2000/1000 MS (Java/Others) Memor ...
- [la P5031&hdu P3726] Graph and Queries
[la P5031&hdu P3726] Graph and Queries Time Limit: 10000/5000 MS (Java/Others) Memory Limit: ...
随机推荐
- hdu 3172 Virtual Friends(并查集,字典树)
题意:人与人交友构成关系网,两个人交友,相当于两个朋友圈的合并,问每个出两人,他们目前所在的关系网中的人数. 分析:用并查集,其实就是求每个集合当前的人数.对于人名的处理用到了字典树. 注意:1.题目 ...
- centos7 改变终端背景色
首先打开终端 2:选择 edit->preferences->profile 3: "model1"是我自己改的名字,最开始是"unname".双击 ...
- 条件数(condition number)
首先引入维基上的解释 In the field of numerical analysis, the condition number of a function with respect to an ...
- memcached windows 修改端口
要想在windows中使用memcached,必须先下载memcached for win32安装. 下载地址:http://jehiah.cz/projects/memcached-win32/ 解 ...
- C++编译错误C2365
曾经我们说重定义一般是函数或者变量的重定义.今天遇到了一个新类型的重定义errorC2365 #include <iostream> using namespace std; class ...
- 在Ubuntu下利用Eclipse调试FFmpeg
[编辑]第一步:准备编译环境 .tar.bz2 -2245/ ./configure -linux-i586.tar.gz 解压后得到jre1.7.0_17目录 最后通过java -version检查 ...
- IOS ARC内存管理,提高效率避免内存泄露
本文转载至 http://blog.csdn.net/allison162004/article/details/38756263 Cocoa内存管理机制 (1)当你使用new.alloc.copy方 ...
- DELL inspiron1420 linux下的wifi驱动安装
首先确定无线网卡类型: lspci -vnn -d 14e4: 比如我的网卡类型为 04:00.0 Network controller [0280]:Broadcom Corporation BCM ...
- php 写入数据库时Call to a member function bind_param() on a non-object
<?php $servername = "localhost"; $username = "username"; $password = "pa ...
- 【BZOJ4004】[JLOI2015]装备购买 贪心+高斯消元
[BZOJ4004][JLOI2015]装备购买 Description 脸哥最近在玩一款神奇的游戏,这个游戏里有 n 件装备,每件装备有 m 个属性,用向量zi(aj ,.....,am) 表示 ( ...