zoukankan      html  css  js  c++  java
  • hdu4034Graph

    View Code
    /*hdu4034Graph
    给出任意两点的最短距离,求出图中最少边数,如果这样的图不存在输出impossible
    1.floyd去松弛每条边,如果能松弛,则不合理。
    2.floyd判断d[i][j]能否表示为d[i][k]+d[k][j]的形式,这样就可以去掉一条边了(假设开始所有顶点间都有边)。
    3.ans=n*(n-1)-cnt. 即总边数-可以去掉的边。
    */
    #include<iostream>
    #include<algorithm>
    using namespace std;
    #define MAXN 105
    #define INF 1000000000
    int d[MAXN][MAXN],vis[MAXN][MAXN],tot;
    int main()
    {
    int cas,n,Cas=0;;
    scanf("%d",&cas);
    while(cas--)
    {
    scanf("%d",&n);
    tot=0;
    for(int i=1;i<=n;i++)
    for(int j=1;j<=n;j++)
    {
    scanf("%d",&d[i][j]);
    }
    int OK=1;
    memset(vis,0,sizeof(vis));
    for(int k=1;k<=n;k++)//floyed任意两点的最短距离
    for(int i=1;i<=n;i++)
    for(int j=1;j<=n;j++)
    {
    if(d[i][j]>d[i][k]+d[k][j]){OK=0;}
    else if(i!=k&&k!=j&&d[i][j]==d[i][k]+d[k][j]&&!vis[i][j])
    {
    tot++;
    vis[i][j]=1;
    }
    }
    printf("Case %d: ",++Cas);
    if(OK)printf("%d\n",n*(n-1)-tot);
    else printf("impossible\n");
    }
    }

  • 相关阅读:
    第19篇 2016年计划
    第18篇 我的中国梦
    Linux中文件实时同步
    Ansible Playbook
    Ansible简介及常用模块
    HTTP协议简单认识
    zabbix 分布式监控Proxy
    Zabbix中Agent自动注册
    Groovy基础语法
    Python文件操作
  • 原文地址:https://www.cnblogs.com/sook/p/2226439.html
Copyright © 2011-2022 走看看