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 ...
随机推荐
- vue响应式原理
vue的响应式,数据模型仅仅是普通的Javascript对象.当你修改它们时,视图会进行更新 那么如何追踪变化: 当把普通的js对象传给vue实例的data选项,Vue将遍历此对象的所有属性,并使用O ...
- L2-018 多项式A除以B(模拟)
这仍然是一道关于A/B的题,只不过A和B都换成了多项式.你需要计算两个多项式相除的商Q和余R,其中R的阶数必须小于B的阶数. 输入格式: 输入分两行,每行给出一个非零多项式,先给出A,再给出B.每行的 ...
- 18-matlab知识点复习一
clc; clear; %% 输出 clc, clear; fprintf('%.19f', pi); fprintf('%d', 110); inf pi disp([1,3,5]) disp('a ...
- 面向对象的 __slots__
优点: 1. __slots__ 能够减小内存的占用,限制对象只能有这几个属性,再加属性会报错 . 副作用: 1. 设置了__slots__之后,实例对象就没有__dict__了 2. __slots ...
- linux回顾
linux内容回顾: centos6.9 ubuntu12 麒麟linux suse(德国linux) depin xshell(连接工具) vmware workstation(个人学习) ...
- PHP整理--MySQL--DOS命令操作数据库
一.MySQL:关系型数据库,存在表的概念. MySQL的结构:数据库可以存放很多表,每张表可以存放多个字段,每个字段可以存放多个记录. 二.Dos操作数据库 用PHPStudy终端➡其他选项菜单➡M ...
- Windows Server 2012 正式版/标准版/数据中心版安装序列号密钥
Windows Server 2012(开发代号:Windows Server 8)是微软发布的一款服务器操作系统,也是Windows 8对应的服务器版本,属于是Windows Server 2008 ...
- 通过PHP调用微信JSSDK实例
JSSDK使用步骤: 1. 先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”. 2. 采用http GET方式请求获得access_token(有效期7200秒). 3. ...
- spring :Log4j各级别日志重复打印
使用filter进行日志过滤 这个其实是Log4j自带的方案,也是推荐方案,不知道为什么网上的资料却很少提到这点. 把log4j.properties配置文件修改成如下: #root日志 log4j. ...
- 微信小程序上拉下拉刷新
小程序提供了,onPullDownRefresh和onReachBottom两个事件函数监听下拉和上拉事件函数.提示加载中,取消加载中 效果: js文件 // pages/enterprise/ent ...