HDU - 4034 Graph (floyd变形)
来源:互联网 发布:叫车软件 编辑:程序博客网 时间:2024/05/30 02:51
题目大意:给出每个点之间的最短距离,问有多少条边是无用的(即该边可以由另外两条边代替)
解题思路:100个点,果断floyd,接着判断
如果dp[i][j] > dp[i][k] + dp[k][j]表示这张图构建不了,因为最短路冲突了
如果dp[i][j] == dp[i][k] + dp[k][j],就表示ij这条路可以被ik和kj取代,那么这条路就可去掉了
去掉的路记得标记。。。WA了好多次
#include <cstdio>#include <algorithm>using namespace std;#define N 110int dis[N][N], cas = 1, n;bool vis[N][N];void init() { scanf("%d", &n); for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) { scanf("%d", &dis[i][j]); vis[i][j] = 0; }}int floyd() { int ans = n * (n -1); for (int k = 0; k < n; k++) for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) { if (dis[i][j] > dis[i][k] + dis[k][j]){ return -1; } if (i != k && k != j && i != j && !vis[i][j] && dis[i][j] == dis[i][k] + dis[k][j]) { vis[i][j] = 1; ans--; } } return ans;}void solve() { int ans = floyd(); printf("Case %d: ", cas++); if (ans == -1) printf("impossible\n"); else printf("%d\n", ans);}int main() { int test; scanf("%d", &test); while (test--) { init(); solve(); } return 0;}
0 0
- HDU - 4034 Graph (floyd变形)
- HDU 4034 Graph(Floyd变形)
- HDU 4034 Graph【最短路之floyd变形】
- hdu 4034 Graph(floyd)
- hdu 4034 Graph(floyd)
- hdu 4034 floyd Graph
- hdu 4034 Graph (floyd)
- hdu 4034 Graph Floyd
- hdu 4034 Graph(逆向floyd)
- hdu 4034 floyd变形(入门难度)
- HDU 4034 Graph(11年成都 Floyd运用)
- HDU 4034 Graph(11年成都 Floyd运用)
- hdu 题目4034 (floyd算法的理解变形)
- hdu 4034 Graph解题报告-Floyd思想
- hdu 4034 Graph(深化最短路floyd)
- HDU 4034Graph floyd 最短路
- HDU 1181 变形记 (DFS / Floyd)
- hdu 2833 WuKong(floyd变形)
- PHP—准备篇
- ReferenceError: Invalid assignment left-hand side
- nyoj106 背包问题
- 黑马程序员----java基础String和stringbuffer总结
- 1026. Table Tennis (30)
- HDU - 4034 Graph (floyd变形)
- HDU - 1596 find the safest road (最短路水题)
- 成功将qt程序移植到arm板上
- nyoj12 喷水装置(二)
- 组合模式
- java jdk TimSort
- 私有继承与保护继承
- Web单元测试常用工具介绍
- JSP