hdu4370 比较抽象的最短路
题意:
给你一个n*n的矩阵,然后让咱们构造另一个n*n的矩阵,构造的矩阵有如下要求,
1.X12+X13+...X1n=1.
2.X1n+X2n+...Xn-1n=1.
3.for each i (1<i<n), satisfies ∑Xki (1<=k<=n)=∑Xij (1<=j<=n).
思路:
感觉这个思路很奇葩啊,看了网上好多解释,但是很失望啊,几乎所有人说的都一样啊,一样到几乎不差一个字,我就 呵呵了,说实话这个题目我不是很理解,可以说现在并不是很明白,但是我可以说下我现在对他们的做法的一些理解,可能不全面,也可能有错误,希望路过的大牛指点,首先据说这是个0/1规划问题,我只知道0/1分数规划,不知道什么是0/1规划,而且具我的了解这个题目跟0/1分数规划没啥关系,我们现在就往图论上靠一下,首先虚拟出n个点来,记住这n个点不是行,也不是列,把题目给的矩阵就单独当成是一些数据,一些点之间的距离,不要去往矩阵上想,这样便于理解,然后分析它给的三个条件:
1.X12+X13+...X1n=1. 这个条件可以理解成是点1的出度为1,因为1会选择也只能选择一个点连出去,这样的话1的出度为0.
2.X1n+X2n+...Xn-1n=1. 同上,n的入度为0.
3.for each i (1<i<n), satisfies ∑Xki (1<=k<=n)=∑Xij (1<=j<=n).这个说的是除了1,n外,所有的点的入度和出度都相等。
这样,突然就想到了图的特点,这样我们想象一下,超级原点1,超级汇点n,中间所有的都是入度等于出度,让我们找一个最小的花费满足上面的3点要求,而且最关键的是所有点的权值都是 >= 0的,这样我们就可以用最短路去跑了,直接跑1->n之间的最短路,可能有人想,跑最短路不是直接就默认中间的点的部分所有的入度和出度都是1了?没错,所有的都是1,因为想象一下,能用1就满足题意了,还有必要再多跑吗?这个地方不要想矩阵的问题,不然很容易蒙的,这样我们跑出最短路c,这个是一种情况,还有另一种情况就是可以直接从1跑一个最小环得到花费c1,然后从n跑一个环得到最小花费c2,两个环也满足上面的三个限制,这样我们只要输出min(c
,c1 + c2)就行了,对了还有一个差点忘记说了,至于找最小花费环,方法很多,可以直接搜索,说一个对于这个题目比较简单的方法(在网上看的!嘿嘿),我们可以在跑最短路的时候先别把起始点入队,把起始点连接的所有点入队,这样跑完
之后,到起始点的最短距离就是最小环了(具体看代码),以上就是我对网上题解的理解,目前只有这些,可能不对,很希望能和看到的人一起交流研究这个题目。
#include<stdio.h>
#include<string.h>
#include<queue> #define N_node 330
#define INF 1000000000
using namespace std; int cost[N_node][N_node];
int s_x[N_node] ,mark[N_node]; void spfa(int s ,int n)
{
for(int i = 0 ;i <= n ;i ++)
s_x[i] = INF ,mark[i] = 0;
queue<int>q;
for(int i = 1 ;i <= n ;i ++)
{
if(s == i) continue;
s_x[i] = cost[s][i];
mark[i] = 1;
q.push(i);
}
while(!q.empty())
{
int xin ,tou;
tou = q.front();
q.pop();
mark[tou] = 0;
for(int i = 1 ;i <= n ;i ++)
{
xin = i;
if(s_x[xin] > s_x[tou] + cost[tou][xin])
{
s_x[xin] = s_x[tou] + cost[tou][xin];
if(!mark[xin])
{
mark[xin] = 1;
q.push(xin);
}
}
}
}
} int main ()
{
int i ,j ,n;
while(~scanf("%d" ,&n))
{
for(i = 1 ;i <= n ;i ++)
for(j = 1 ;j <= n ;j ++)
scanf("%d" ,&cost[i][j]);
spfa(1 ,n);
int Ans = s_x[n];
int c1 = s_x[1];
spfa(n ,n);
int c2 = s_x[n];
if(Ans > c1 + c2) Ans = c1 + c2;
printf("%d\n" ,Ans);
}
return 0;
}
hdu4370 比较抽象的最短路的更多相关文章
- HDU-4370 '0 or 1' 最短路 要考虑连通性
题目链接:https://cn.vjudge.net/problem/HDU-4370 题意 给一个矩阵C(nn),要我们找到一个矩阵X(nn),满足以下条件: X_{12}+X_{13}+...X_ ...
- HDU4370 0 or 1 最短路
分析: 1001 (已更新) 显然,题目给的是一个0/1规划模型.解题的关键在于如何看出这个模型的本质.3个条件明显在刻画未知数之间的关系,从图论的角度思考问题,容易得到下面3个结论:1.X12+X ...
- poj3744 Scout YYF I
题意:n个地雷(n<=10)在长度10^8的坐标轴上,yyf从横坐标为1的点开始,每一步有p的概率向右跳一格,(1-p)的概率向右跳两格(不会踩到中间一格),如果踩到地雷他就会死.问活下来的概率 ...
- hdu4370 0 or 1【最短路+建图】
转载请注明出处,谢谢:http://www.cnblogs.com/KirisameMarisa/p/4297627.html ---by 墨染之樱花 题目链接:http://acm.hdu.ed ...
- hdu4370 dijkstra矩阵转单向边最短路矩阵+自环闭环
/* 矩阵太神奇了Orz,网上的题解大多是spfa,不过我发想dijkstra也能做 把n*n的矩阵看成是单向边距离矩阵就行 */ #include<iostream> #include& ...
- HDU4370:0 or 1(最短路)
0 or 1 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4370 Description: Given a n*n matrix Cij (1< ...
- FJNU 1196 汪老司机(DP or 建图+最短路)
1196: 汪老司机 Time Limit: 1000 MS Memory Limit: 257792 KB 64-bit interger IO format: %lld ...
- 【66测试20161115】【树】【DP_LIS】【SPFA】【同余最短路】【递推】【矩阵快速幂】
还有3天,今天考试又崩了.状态还没有调整过来... 第一题:小L的二叉树 勤奋又善于思考的小L接触了信息学竞赛,开始的学习十分顺利.但是,小L对数据结构的掌握实在十分渣渣.所以,小L当时卡在了二叉树. ...
- UVA 11374 Airport Express(最短路)
最短路. 把题目抽象一下:已知一张图,边上的权值表示长度.现在又有一些边,只能从其中选一条加入原图,使起点->终点的距离最小. 当加上一条边a->b,如果这条边更新了最短路,那么起点st- ...
随机推荐
- 2.2 Python3基础-基本数据类型
>>返回主目录 源代码 # 基本数据类型 # Number类型:如何查看变量的数据类型? name = 'Portos' print(type(name)) # 结果:str print( ...
- vue+lib-flexible实现大小屏幕,超大屏幕的适配展示。
p.p1 { margin: 0; font: 12px "PingFang SC" } span.s1 { font: 12px "Helvetica Neue&quo ...
- JavaCV 树莓派打造监控系统平台
使用树莓派搭建视频监控平台去年就简单的实现了,只不过功能比较简陋,最近抽时间重构了原来的平台. 环境搭建 环境部分,参考旧版的安装及配置: 树莓派搭建视频监控平台 树莓派视频监控平台实现录制归档 框架 ...
- Docker上安装Redis
Docker可以很方便的进行服务部署和管理,下面我们通过docker来搭建Redis的单机模式.Redis主从复制.Redis哨兵模式.Redis-Cluster模式 一.在Docker上安装单机版R ...
- 8、Spring教程之静态代理/动态代理
为什么要学习代理模式,因为AOP的底层机制就是动态代理! 代理模式: 静态代理 动态代理 学习aop之前 , 我们要先了解一下代理模式! 静态代理 静态代理角色分析 抽象角色 : 一般使用接口或者抽象 ...
- PictureCleaner 官方版 v1.1.3.04061,免费的图片校正及漂白专业工具,专业去除文档图片黑底麻点杂色,规格化A4、B5尺寸输出,还你一个清晰的文本。
当家长多年,每天都要拍照试卷打印.用App去掉图片黑底就成了每天必备工作.可是,有些图片文件不是来自手机,所以需要一个电脑版的图片漂白工具.经过一个多月努力,PictureCleaner官方版诞生了 ...
- [Fundamental of Power Electronics]-PART I-3.稳态等效电路建模,损耗和效率-3.4 如何获得模型的输入端口
3.4 如何获得模型的输入端口 Fig 3.16 Buck converter example 让我们尝试使用3.3.3节的步骤来推导图3.16所示的Buck变换器的模型.电感绕组电阻同样由串联电阻\ ...
- MySQL常用配置参数说明
1.sync_binlog sync_binlog=0,当事务提交之后,MySQL不做fsync之类的磁盘同步指令刷新binlog_cache中的信息到磁盘,而让Filesystem自行决定什么时候来 ...
- Python基础(七):字符串的使用(上)
什么是字符串? 字符串该如何定义呢?通俗的说:字符串就是一系列的字符. 创建字符串的3种方式 单引号创建 >>> a = 'I am a student' >>> ...
- Element源码:项目初始化和webpack配置
0x00.项目初始化 由于整个过程像素级 copy element,所以将不使用vue-cli初始化项目. 创建项目 新建一个空的文件夹,使用npm init 来初始化项目,并安装vue模块. 修改目 ...