题目链接

给出一个有向图各个点之间的最短距离, 求出这个有向图最少有几条边, 如果无法构成图, 输出impossible。

folyd跑一遍, 如果dp[i][j] == dp[i][k]+dp[k][j]  那i j这条边就可以不要, 如果dp[i][j] > dp[i][k]+dp[k][j], 那么就无法构图。

以防万一我又加了个vis数组, 是防止i, j这条边减多次的,  我也不知道有没有用==

#include <iostream>
#include <vector>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <map>
#include <set>
#include <string>
#include <queue>
#include <stack>
#include <bitset>
using namespace std;
#define pb(x) push_back(x)
#define ll long long
#define mk(x, y) make_pair(x, y)
#define lson l, m, rt<<1
#define mem(a) memset(a, 0, sizeof(a))
#define rson m+1, r, rt<<1|1
#define mem1(a) memset(a, -1, sizeof(a))
#define mem2(a) memset(a, 0x3f, sizeof(a))
#define rep(i, n, a) for(int i = a; i<n; i++)
#define fi first
#define se second
typedef pair<int, int> pll;
const double PI = acos(-1.0);
const double eps = 1e-;
const int mod = 1e9+;
const int inf = ;
const int dir[][] = { {-, }, {, }, {, -}, {, } };
int dp[][], vis[][];
int main()
{
int t, n;
cin>>t;
for(int casee = ; casee<=t; casee++) {
cin>>n;
mem(vis);
printf("Case %d: ", casee);
for(int i = ; i<=n; i++) {
for(int j = ; j<=n; j++) {
scanf("%d", &dp[i][j]);
}
}
int sum = n*(n-);
int flag = ;
for(int k = ; k<=n; k++) {
for(int i = ; i<=n; i++) {
for(int j = ; j<=n; j++) {
if(k == i || k == j)
continue;
if(dp[i][j] == dp[i][k]+dp[k][j] && !vis[i][j]) {
sum--, vis[i][j] = ;
}
if(dp[i][j]>dp[i][k]+dp[k][j])
flag = ;
}
}
}
if(flag) {
puts("impossible");
} else {
printf("%d\n", sum);
}
}
return ;
}

hdu 4034 Graph floyd的更多相关文章

  1. HDU 4034 Graph(Floyd变形——逆向判断)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4034 Problem Description Everyone knows how to calcu ...

  2. HDU 4034 Graph Floyd最短路

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=4034 题意: 给你一个最短路的表,让你还原整个图,并使得边最少 题解: 这样想..这个表示通过floy ...

  3. hdu 4034 Graph (floyd的深入理解)

    Graph Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others)Total Submi ...

  4. HDU 4034 Graph(floyd,最短路,简单)

    题目 一道简单的倒着的floyd. 具体可看代码,代码可简化,你有兴趣可以简化一下,就是把那个Dijsktra所实现的功能放到倒着的floyd里面去. #include<stdio.h> ...

  5. HDU 4034 Graph:反向floyd

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4034 题意: 有一个有向图,n个节点.给出两两节点之间的最短路长度,问你原图至少有多少条边. 如果无解 ...

  6. 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-> ...

  7. hdu 4034 Graph

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4034 题目分类:图论 题意:n个顶点,然后给出从i到j的最短路径长度,求至少需要哪些边 第二组样例 第 ...

  8. [la P5031&hdu P3726] Graph and Queries

    [la P5031&hdu P3726] Graph and Queries Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: ...

  9. HDU 3726 Graph and Queries treap树

    题目来源:HDU 3726 Graph and Queries 题意:见白书 思路:刚学treap 參考白皮书 #include <cstdio> #include <cstring ...

随机推荐

  1. 使用EXTEND方式来分段处理大表的搬数据

    创建一个表: 记录rowid的分区段并作为处理的日志表: DROP TABLE DEAL_TABLE_EXTENT; CREATE TABLE DEAL_TABLE_EXTENT(seq        ...

  2. 用一条sql查出总长和状态为2是长度

    查询同一张表里同一个字段值的和以及状态是2(或1)时,该字段值的和

  3. MySQL函数笔记

    MySQL函数笔记 日期函数 SELECT t1.xcjyrq, t1.* FROM view_sbxx t1 WHERE t1.syzt ; SELECT t1.xcjyrq, t1.* FROM ...

  4. 提示constructor无法location的原因

    1.缺少对应属性的set方法 2.缺少确实没有对应的方法 3.对应的构造方法中参数类型不匹配 4.java对象不会在寻找构造函数时执行数据类型的强制类型转换,没有对应的类型就返回异常,不会自动强制转换 ...

  5. phpStrom添加插件:php文档生成(phpDocumentor)

    1. 依次打开:Files => Settings => External Tools => +(add) 2. 填写信息:name:phpDoc; group:PHP插件; des ...

  6. javascript 中字符串之比较

    <script type="text/javascript"> var string1="apple"; var string2="Ban ...

  7. hdu 2222 Keywords Search ac自动机模板

    题目链接 先整理一发ac自动机模板.. #include <iostream> #include <vector> #include <cstdio> #inclu ...

  8. Oracle连接数过多释放机制

    Oracle连接数过多释放机制  sqlplus /nolog   打开sqlplus          connect /as sysdba    使用具有dba权限得用户登陆oracle      ...

  9. 运用JavaScript构建你的第一个Metro式应用程序(on Windows 8)(一)

    原文 http://blog.csdn.net/zhangxin09/article/details/6784547 作者:Chris Sells 译: sp42   原文 包括 HTML.CSS 和 ...

  10. TelephonyManager

    每台手机有一个唯一的设备ID