hdu 4370
这个题说实话我没看出来,我看的别人的博客
https://blog.csdn.net/u013761036/article/details/39377499
这个人讲的很清楚,可以直接去看他的
题目给的 3个要求:
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).
简单来说就是创建n个点,X 12+X 13+...X 1n=1 代表我们的 1点 的出度是1,这里没有对 1点 的入度做限制,也就是说入度可以为0
X 1n+X 2n+...X n-1n=1 代表 n点 的入读是n,同上,出度可以为0
for each i (1<i<n), satisfies ∑X ki (1<=k<=n)=∑X ij (1<=j<=n). 代表 2 到 (n-1) 这些点的入度等于出度
仔细想一下最短路,不也是这样吗,中间的点入度等于出度,初始点 入度为 0,结束的点出度为0
把 c这个矩阵看成任意两点间的距离,把 x 矩阵看成从1到n 最短路所要经过的路径,
求个最短路就是结果
当然还有一个特殊情况,就是 1到1的最小环+n到n的最小环,这样做出来也是满足那三个条件的
另外题目讲了c[i]>=0,不用担心负环
#include <iostream>
#include <queue>
#include <cstdio>
#include <cmath>
#include <cstring>
using namespace std;
int arr[][];
int n;
bool vis[];
int dis[];
int spfa(int s,int e,int k)
{
memset(dis,0x3f,sizeof(dis));
memset(vis,,sizeof(vis));
queue<int> q;
if(k == )
{
q.push(s);
vis[s] = true;
dis[s] = ;
}
else
{
for(int i = ; i <= n; ++i)
{
if(i == s) continue;
q.push(i);
vis[i] = true;
dis[i] = arr[s][i];
}
}
while(!q.empty())
{
int u = q.front();
q.pop();
vis[u] = false;
for(int i = ; i <= n; ++i)
{
if(i == u) continue;
if(dis[i]>dis[u] + arr[u][i])
{
dis[i] = dis[u] + arr[u][i];
if(vis[i] == false)
{
vis[i] = true;
q.push(i);
}
}
}
}
return dis[e];
}
int main()
{
while(scanf("%d",&n) != EOF)
{
for(int i = ; i <= n; ++i)
{
for(int j = ; j <= n; ++j)
{
scanf("%d",&arr[i][j]);
}
}
int s1 = spfa(,n,);
int s2 = spfa(,,);
int s3 = spfa(n,n,);
if(s1 > s2 + s3) s1 = s2 + s3;
printf("%d\n",s1);
}
}
hdu 4370的更多相关文章
- HDU 4370 0 or 1 (最短路+最小环)
0 or 1 题目链接: Rhttp://acm.hust.edu.cn/vjudge/contest/122685#problem/R Description Given a n*n matrix ...
- HDU - 4370 0 or 1
0 or 1 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- HDU - 4370 0 or 1 最短路
HDU - 4370 参考:https://www.cnblogs.com/hollowstory/p/5670128.html 题意: 给定一个矩阵C, 构造一个A矩阵,满足条件: 1.X12+X1 ...
- HDU 4370 0 or 1(spfa+思维建图+计算最小环)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4370 题目大意:有一个n*n的矩阵Cij(1<=i,j<=n),要找到矩阵Xij(i< ...
- HDU 4370 0 or 1 (最短路)
[题目链接](http://acm.hdu.edu.cn/showproblem.ph Problem Description Given a n/n matrix Cij (1<=i,j< ...
- 思维题(转换) HDU 4370 0 or 1
题目传送门 题意:题目巨晦涩的传递出1点和n点的初度等于入度等于1, 其余点出度和入度相等 分析:求最小和可以转换成求最短路,这样符合条件,但是还有一种情况.1点形成一个环,n点也形成一个环,这样也是 ...
- kuangbin_ShortPath R (HDU 4370)
出题人真是脑洞堪比黑洞 (然后自己也被吸进去了 理解一遍题意 三个条件可以转化为 1的出度是1, n的入度是1, 2~n-1的出度等于入度 不难发现1-n的最短路符合题意 然而其实还有另一种情况 1为 ...
- (中等) HDU 4370 0 or 1,建模+Dijkstra。
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&l ...
- HDU 4370 0 or 1 (01规划)【Dijkstra】||【spfa】
<题目链接> 题目大意: 一个n*n的01矩阵,满足以下条件 1.X12+X13+...X1n=12.X1n+X2n+...Xn-1n=13.for each i (1<i<n ...
随机推荐
- springboot+dubbo提示超时
在消费方工程的application.properties里面加上dubbo.consumer.timeout=30000.
- C#移除URL上指定的参数
/// <summary> /// 移除URL上指定的参数,不区分参数大小写 /// </summary> public static ...
- 利用ELK分析Nginx日志
本文以api.mingongge.com.cn域名为测试对象进行统计,日志为crm.mingongge.com.cn和risk.mingongge.com.cn请求之和(此二者域名不具生产换环境统计意 ...
- net core中动态给log4net添加日志类型
private static object m_Lock = new object(); /// <summary> /// 根据类型获取对应的日志操作类 /// </summary ...
- GOF23设计模式
单例设计模式 饿汉式:
- swift 自动布局设置 tableview 的 tableHeaderView 的高度
class headerView: UIView { var whiteView = UIView().then { $.backgroundColor = UIColor.red } overrid ...
- 史上最全 | 39个RNAseq分析工具与对比
文献:Sahraeian S M E, Mohiyuddin M, Sebra R, et al. Gaining comprehensive biological insight into the ...
- 面试简单整理之spring、spring mvc
90.为什么要使用 spring? 解决企业应用开发的复杂性,IOC.aop 91.解释一下什么是 aop? 面向切面编程.... 92.解释一下什么是 ioc? 控制反转.. 93.spring 有 ...
- python基础之Day20part2
面向过程:核心是过程,解决问题的步骤,先干嘛后干嘛,机械流水线 复杂问题流程化简单化但扩展性差 面向对象:核心是对象,是特征与对象的集合体,基于该思想编写程序,就好比上帝造世界,上帝式的思维方式 扩展 ...
- shapefile添加字段 设置文件名为字段内容
转眼间,这一年又结束了,再记录一点知识吧 同事说他有好多shapefile,想给每个shapefile添加一字段,并设置该字段的内容为shapefile文件名,想着用arcpy实现,于是有了下面的代码 ...