hdu43700 or 1【01规划模型 最短路】

2023-05-16

Description

Given a n*n matrix C ij (1<=i,j<=n),We want to find a n*n matrix X ij (1<=i,j<=n),which is 0 or 1.

Besides,X ij meets the following conditions:

1.X 12+X 13+...X 1n=1
2.X 1n+X 2n+...X n-1n=1
3.for each i (1<i<n), satisfies ∑X ki (1<=k<=n)=∑X ij (1<=j<=n).

For example, if n=4,we can get the following equality:

X 12+X 13+X 14=1
X 14+X 24+X 34=1
X 12+X 22+X 32+X 42=X 21+X 22+X 23+X 24
X 13+X 23+X 33+X 43=X 31+X 32+X 33+X 34

Now ,we want to know the minimum of ∑C ij*X ij(1<=i,j<=n) you can get.
Hint

For sample, X 12=X 24=1,all other X ij is 0.

Input

The input consists of multiple test cases (less than 35 case).
For each test case ,the first line contains one integer n (1<n<=300).
The next n lines, for each lines, each of which contains n integers, illustrating the matrix C, The j-th integer on i-th line is C ij(0<=C ij<=100000).

Output

For each case, output the minimum of ∑C ij*X ij you can get.

Sample Input


4
1 2 4 10
2 0 1 1
2 2 0 5
6 3 1 2  

Sample Output


3  

题意: (先说直接翻译过来的)

给出nxn矩阵Ci,j 求01矩阵Xij满足

1.X 12+X 13+...X 1n=1
2.X 1n+X 2n+...X n-1n=1
3.X矩阵的第i行的和等于第i列的和

做法&思路:

是在最短路分类里的QAQ百思不得其解,先把示例画出来。

咦?有行有列,莫非是拆点了?对于示例选的边可以画出这个图:


好像X矩阵是用来控制C矩阵加边与否的耶

再编一组数据找找规律


看着怎么这么眼熟,我是不是可以从右边往左边加边啊

另一个图:

越想越觉得有道理啊,因为要求第i行和第i列的和相等,就相当于通过新加的边过渡行与列,拆点,连边,其他的边正常连接就好,交了 WA了

看讨论区 有这样一组示例 ,连接的是中间图,咦?怎么分开了,所以我们需要连一个6->5的边


这样就存在两个问题:

1.有可能1->6->5->10,怎么办?1->6 5->10赋成无穷大,不走它就得了

2.如果分成好多团怎么办?依旧只连6->5,因为中间那部分就相当于for each i (1<i<n), satisfies ∑X ki (1<=k<=n)=∑X ij (1<=j<=n)=0了

    #include<iostream>
    #include<cstring>
    #include<cstdlib>
    #include<queue>
    #include<cstdio>
    using namespace std;
    int n,m,x;
    const long long  MAXINT=0x3f3f3f3f;
    const int MAXNUM=609;
    long long dist[MAXNUM];
    long long A[MAXNUM][MAXNUM];
    void Dijkstra(int v0)
    {
        bool S[MAXNUM];// 判断是否已存入该点到S集合中
        for(int i=1; i<=n; ++i)
        {
            dist[i]=A[v0][i];
           // printf("%d    ",dist[i]);
            S[i]=false; // 初始都未用过该点
        }
       // dist[v0] = 0;
        S[v0]=true;
        for(int i=2; i<=n; i++)
        {
            long long mindist = MAXINT;
            int u = -1;// 找出当前未使用的点j的dist[j]最小值
            for(int j=1; j<=n; ++j)
            if((!S[j]) && dist[j]<mindist)
            {
                u = j;// u保存当前邻接点中距离最小的点的号码
                mindist = dist[j];
                //printf("%d        ",mindist);
            }
            S[u] = true;
            for(int j=1; j<=n; j++)
                if((!S[j]) && A[u][j]<MAXINT)
                {
                    if(dist[u] + A[u][j] < dist[j])     //在通过新加入的u点路径找到离v0点更短的路径
                    {
                        dist[j] = dist[u] + A[u][j];    //更新dis                    //记录前驱顶点
                    }
                }
        }
        return;
    }
    int main()
    {
       //freopen("in.txt","r",stdin);
        while(~scanf("%d",&n))
        {
            for(int i=1; i<=n*2; i++)
            {
                for(int j=1; j<=n*2; j++)
                    if(i-j==n) A[i][j]=0;
                    else A[i][j]=MAXINT;
            }
            for(int i=1;i<=n;i++)
                for(int j=1+n;j<=n*2;j++)
                    scanf("%I64d",&A[i][j]);
            A[1][n+1]=A[n][n+n]=MAXINT;
            A[n+1][n]=0;
           // A[1][1+n]=A[n][n*2]=MAXINT;
          //  for(int i=1;i<=2*n;i++)for(int j=1;j<=2*n;j++)printf("i=%d,j=%d,A=%d\n",i,j,A[i][j]);
            n=n+n;
            Dijkstra(1);
            //for(int i=n/2+1;i<=n;i++)
            printf("%I64d\n",dist[n]);
        }
        return 0;
    }


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

hdu43700 or 1【01规划模型 最短路】 的相关文章

  • realvnc免费版,细数4款超好用的realvnc免费版

    RealVNC是VNC xff08 Virtual Network Computing xff09 众多操作平台版本中的一员 xff0c 是互联网上比较流行的远程控制软件 它包括vnc4server和vnc4viewer两个部分 xff0c
  • linux系统实现路由功能

    概述 xff1a 1 在完成4台设备ip配置后默认路由有 路由器Rocky02上默认有 xff1a 192 168 10 0 172 20 0 0 路由器Rocky03上默认有 xff1a 192 168 10 0 10 0 0 0 主机R
  • TT 的旅行日记(Dijkstra)

    问题描述 xff1a 众所周知 xff0c TT 有一只魔法猫 今天他在 B 站上开启了一次旅行直播 xff0c 记录他与魔法猫在喵星旅游时的奇遇 TT 从家里出发 xff0c 准备乘坐猫猫快线前往喵星机场 猫猫快线分为经济线和商业线两种
  • 猫猫向前冲(拓扑排序)

    问题描述 xff1a 有一天 xff0c TT 在 B 站上观看猫猫的比赛 一共有 N 只猫猫 xff0c 编号依次为1 xff0c 2 xff0c 3 xff0c xff0c N进行比赛 比赛结束后 xff0c Up 主会为所有的猫猫从前
  • HRZ的序列

    问题描述 xff1a 相较于咕咕东 xff0c 瑞神是个起早贪黑的好孩子 xff0c 今天早上瑞神起得很早 xff0c 刷B站时看到了一个序列a xff0c 他对这个序列产生了浓厚的兴趣 xff0c 他好奇是否存在一个数K xff0c 使得
  • 东东学打牌

    问题描述 xff1a 最近 xff0c 东东沉迷于打牌 所以他找到 HRZ ZJM 等人和他一起打牌 由于人数众多 xff0c 东东稍微修改了亿下游戏规则 xff1a 所有扑克牌只按数字来算大小 xff0c 忽略花色 每张扑克牌的大小由一个
  • 咕咕东的目录管理器

    文章目录 问题描述样例输入样例输出 解题思路代码 问题描述 咕咕东的雪梨电脑的操作系统在上个月受到宇宙射线的影响 xff0c 时不时发生故障 xff0c 他受不了了 xff0c 想要写一个高效易用零bug的操作系统 这工程量太大了 xff0
  • 针对CSP-T1,T2的练习

    文章目录 题目1问题描述样例输入样例输出 解题思路代码 题目2问题描述样例输入样例输出 解题思路代码 题目1 问题描述 给出n个数 xff0c zjm想找出出现至少 n 43 1 2次的数 xff0c 现在需要你帮忙找出这个数是多少 xff
  • Rust的控制流:条件、循环以及模式匹配

    文章目录 条件控制循环控制forwhileloopbreak continue 模式匹配 条件控制 Rust的条件控制也是使用if else xff0c 和其他语言相比没有多大区别 xff0c 直接看例子 xff1a fn main let
  • 在Windows上搭建Rust开发环境——Clion篇

    文章目录 在Windows上搭建Rust开发环境 Clion篇安装mingw64安装Rusthello world安装Clion使用Clion创建并调试项目 在Windows上搭建Rust开发环境 Clion篇 刚开始学习Rust的时候 x
  • 洛谷P3366最小生成树模板

    kruskal span class token macro property span class token directive keyword include span span class token string lt cstdi
  • 在家远程控制 少了它俩简直太遗憾了

    互联网公司的值班 xff0c 本意在于出现问题时有人及时处理 xff0c 毕竟上线运行的产品 xff0c 出问题可能会影响到公司的整体收益 虽然工作是965 xff0c 但值班日程表却明明白白写着谁负责保障今天的产品运行正常 涉及到技术 运
  • Openstack Kolla-Ansible安装部署

    Openstack Kolla Ansible安装部署 部署节点制作 环境准备 CentOS环境安装 配置国内pypi源 xff1a mkdir p config pip vim config pip pip conf global ind
  • Windows 远程桌面登录蓝屏、不显示桌面问题解决方法

    远程桌面登录蓝屏 不显示桌面问题解决方法 有时候的不当操作 xff0c 可以使Windows服务器或vps远程桌面出现蓝屏或者黑屏 xff01 遇到此问题 xff0c 不要急急忙忙的让机房值班给你重启机器 xff0c 因为此时除了远程连接不
  • 【5G核心网】5GC核心网之网元UPF

    UPF xff08 User Plane Function xff0c 用户面功能 xff09 xff1a ts 29 244 23 501 5 8 1 UPF User Plane Function 用户平面功能 用于RAT内 RAT间移
  • 玩转ADB命令(ADB命令使用大全)

    此文章内容整合自网络 xff0c 欢迎转载 我相信做Android开发的朋友都用过ADB命令 xff0c 但是也只是限于安装应用push文件和设备重启相关 xff0c 更深的就不知道了 xff0c 其实我们完全可以了解多一点 xff0c 有
  • Ubuntu12.04操作系统安装时,出现的问题及解决方案

    问题一 Windows 下用 putty 连接不上虚拟机上的 Ubuntu12 04 解决方案 预探索 问题可能的原因 A 先确定你能不能ping通远程的ubuntu或者虚拟机 B 如果还不能登录 xff0c 分析原因是大多数没有真正开启s
  • 获取镜像源来搭建本地Ubuntu14.04源

    针对公司的网络限制 xff0c 可以在局域网内搭建一台本地的ubuntu源 1 修改源配置 换成搜狐源 默认的ubuntu源不如某些国内的源速度快 vi etc apt source list deb http mirrors sohu c

随机推荐