当前位置: 首页 > news >正文

HDU 4370 0 or 1

题意:找出一个0,1,矩阵

分析:
转换思维的题啊,由一道让人不知如何下手的题,转换为了最短路基本思路就是把矩阵看做一个图,图中有n个点,1号点出度为1,
n号点入度为1,其它点出度和入度相等,路径长度都是非负数,等价于一条从1号节点到n号节点的路径,故Xij=1表示需要经
过边(i,j),代价为Cij。Xij=0表示不经过边(i,j)。注意到Cij非负且题目要求总代价最小,因此最优答案的路径一定可以对应一条简单路径。

最终,我们直接读入边权的邻接矩阵,跑一次1到n的最短路即可,记最短路为path。

漏了如下的情况B:
从1出发,走一个环(至少经过1个点,即不能是自环),回到1;从n出发,走一个环(同理),回到n。
也就是1和n点的出度和入度都为1,其它点的出度和入度为0.

由于边权非负,于是两个环对应着两个简单环。

因此我们可以从1出发,找一个最小花费环,记代价为c1,
再从n出发,找一个最小花费环,记代价为c2。
(只需在最短路算法更新权值时多加一条记录即可:if(i==S) cir=min(cir,dis[u]+g[u][i]))

故最终答案为min(path,c1+c2)

#include<stdio.h>
#include<string.h>
#define clr(x)memset(x,0,sizeof(x))
#define INF 0x1f1f1f1f
#define maxn 333
#define min(a,b)(a)<(b)?(a):(b)
int g[maxn][maxn];
int d[maxn];
int q[1000];
int v[maxn];
int n;
void spfa(int st,int en)
{
    int i,u,front,rear;
    front=rear=0;
    clr(v);
    d[st]=INF;
    for(i=1;i<=n;i++)
    {
        if(i!=st)
        {
            v[i]=1;
            d[i]=g[st][i];
            q[rear++]=i;
        }
    }
    while(front!=rear)
    {
        u=q[front++];
        v[u]=0;
        for(i=1;i<=n;i++)
        {
            if(d[u]+g[u][i]<d[i])
            {
                d[i]=d[u]+g[u][i];
                if(!v[i])
                {
                    v[i]=1;
                    q[rear++]=i;
                }
            }
        }
    }
}
int main()
{
    int res,i,j,ds,dn,di;
    while(scanf("%d",&n)!=EOF)
    {
        for(i=1;i<=n;i++)
            for(j=1;j<=n;j++)
                scanf("%d",&g[i][j]);
        spfa(1,n);
        di=d[n];
        ds=d[1];
        spfa(n,n);
        dn=d[n];
        res=min(ds+dn,di);
        printf("%d\n",res);
    }
    return 0;
}

 

转载于:https://www.cnblogs.com/dream-wind/archive/2012/09/05/2671213.html

相关文章:

  • 变量的自动初始化
  • 编译安装apache+mysql+php 支持jpg,gd等
  • Java程序员必知的8大排序
  • 网络营销策划:揭秘企业营销策划方案三大法则
  • 关于MySQL的慢查询日志
  • MPU6050程序
  • 小技巧——让光驱符号定位在硬盘分区之后
  • wordpress hook机制
  • 转载:SVN分支合并
  • Mysql的Profile中的status的常量含义
  • GridView里的按钮事件
  • 通用SQL数据库查询语句精华使用简介
  • Cocoa教学:Windows OOP与Cocoa MVC之对比
  • nginx 负载均衡5种配置方式
  • js代码触发事件
  • Codepen 每日精选(2018-3-25)
  • Cookie 在前端中的实践
  • CSS实用技巧
  • JavaScript 基本功--面试宝典
  • JavaScript设计模式之工厂模式
  • JS基础之数据类型、对象、原型、原型链、继承
  • maven工程打包jar以及java jar命令的classpath使用
  • Python - 闭包Closure
  • Vue小说阅读器(仿追书神器)
  • 初识 webpack
  • 第十八天-企业应用架构模式-基本模式
  • 对JS继承的一点思考
  • 开发基于以太坊智能合约的DApp
  • 码农张的Bug人生 - 见面之礼
  • 前端工程化(Gulp、Webpack)-webpack
  • 前端面试之CSS3新特性
  • 源码安装memcached和php memcache扩展
  • ​渐进式Web应用PWA的未来
  • #DBA杂记1
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (八)Spring源码解析:Spring MVC
  • (第二周)效能测试
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (规划)24届春招和25届暑假实习路线准备规划
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (一)Thymeleaf用法——Thymeleaf简介
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • (转)Java socket中关闭IO流后,发生什么事?(以关闭输出流为例) .
  • (转)人的集合论——移山之道
  • .htaccess配置重写url引擎
  • .NET 4.0中使用内存映射文件实现进程通讯
  • .NET 的程序集加载上下文
  • .NET 反射的使用
  • .NET 使用配置文件
  • .NET/C# 使用反射调用含 ref 或 out 参数的方法
  • .net反混淆脱壳工具de4dot的使用
  • .NET构架之我见
  • .Net转Java自学之路—SpringMVC框架篇六(异常处理)
  • @kafkalistener消费不到消息_消息队列对战之RabbitMq 大战 kafka