题目链接:点击查看

题目大意:给定一个n*n的矩阵,需要构造出一个n*n的矩阵,规定矩阵只能由0或1组成,使得最小。

题目解析:题意很明确,但是却很抽象,我们需要从图论的角度来看待三个初始条件:

假设此时的n为4:

  1. :表示点1的出度为1
  2. :表示点n的入度为1
  3. :表示点2~n-1的出度等于入度

初步分析得到三个条件可以等价于一条从1到n的最短路,权值为,而表示有向图中的边是否经过,1表示经过,0表示不经

过因为在本题中权值非负,所以一定有一条最短路径满足题意

这样就完了吗?其实这里还有一个小细节值得注意,就是题目中只是描述了点1的出度和点n的入度,并没有交代点1的入度和点n

的出度,所以他们不能默认为0,那么意思就是他们可以各自组成一个环路(至少经过一个点,即不能是自环,因为出度或入度

为1),比如这样的一个矩阵X也是满足题意的:

假设c1为点1自环的最短路,c2为点n自环的最短路,所以我们最后要求的答案就是min(d[n],c1+c2)

在处理最短路部分初始化的时候要自己手动模拟第一次的运算,例如我们需要求d[1],而正常的最短路都是将d[1]初始化为0,

而这个题中如果要求自环回到点1的最短路,我们需要将d[1]初始化为inf,直接上代码吧,代码更简洁明了

#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#include<stack>
#include<queue>
#include<map>
#include<sstream>
#include<cmath>
using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=310;int n;int maze[N][N];int d[N];bool vis[N];void spfa(int x)
{queue<int>q;for(int i=1;i<=n;i++)//init{if(i==x){d[i]=inf;vis[i]=false;}else{d[i]=maze[x][i];q.push(i);vis[i]=true;}}while(!q.empty()){int tem=q.front();q.pop();vis[tem]=false;for(int i=1;i<=n;i++){if(d[i]>d[tem]+maze[tem][i]){d[i]=d[tem]+maze[tem][i];if(!vis[i]){q.push(i);vis[i]=true;}}}}
}int main()
{
//  freopen("input.txt","r",stdin);while(scanf("%d",&n)!=EOF){for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)scanf("%d",&maze[i][j]);spfa(1);int ans1=d[n];int ans2=d[1];spfa(n);ans2+=d[n];cout<<min(ans1,ans2)<<endl;}return 0;
}

HDU - 4370 0 or 1(思维+最短路)相关推荐

  1. R - 0 or 1 HDU - 4370

    R - 0 or 1 HDU - 4370 题意: 给你一个邻接矩阵,让你求出从满足条件的答案, 条件如下: 1 的出度为 1, 入度不一定 n 的入度为 1, 出度不一定 其余点的 出度 == 入度 ...

  2. 【HDU - 2112】 HDU Today(dijkstra单源最短路 + map转换)

    题干: HDU Today Time Limit : 15000/5000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Tota ...

  3. hdu 2066 一个人的旅行(最短路)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2066 Problem Description 虽然草儿是个路痴(就是在杭电待了一年多,居然还会在校园里 ...

  4. HDU 4276 The Ghost Blows Light 最短路+树形背包

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=4276 目录 题意 分析 Code 题意 有一棵树,每个节点都有财富wi,每条边都会花费ci的时间,问你 ...

  5. HDU 6092 Rikka with Subset 思维 递推

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=6092 题目描述: 给你一个集合的所有子集各个和, 让你找到这个集合, 输出字典序最小 解题思路: 下 ...

  6. HDU 2066-一个人的旅行(最短路Dijkstra)

    一个人的旅行 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  7. Deleting Edges 思维 最短路 删边

    题意 :给一有向图,删去图中某些边(可以不删),使剩下的边构成一颗树,且0号点到每个点的距离依然为原图中0号点到每个点的最短距离.求删边的方案数,即新图所有可能性的方案数. 思路 :先用dijkstr ...

  8. HDU - 6071 Lazy Running 同余最短路 + 分层

    传送门 题意: 给定四个点构成一个环,给出四个点之间的距离,让后从222号点出发,最终回到222号点,求经过的距离>=k>=k>=k的最小距离. 思路: 由于从222开始,最终在22 ...

  9. codeforces773 D. Perishable Roads(思维+最短路)

    D. Perishable Roads 题意简述: 一个 nnn 个点的完全图 以 iii 为根节点时 询问 能构造的树的 ∑d(x)\sum d(x)∑d(x) 最小是多少. d(x)d(x)d(x ...

最新文章

  1. SAP零售行业解决方案初阶 1
  2. 继续说说美国互联网版权监管法案(SOPA)
  3. 聚类算法 sklearn k_means (返回一维数据的最优聚类)
  4. 配置token_Nginx常用的配置
  5. 设计模式---组合模式
  6. C++的文艺复兴: Why C++? 王者归来
  7. Java-eclipse快捷键及设置
  8. OpenShift 4 - 基于Memory的HPA
  9. functions.php隐藏恶意代码,警惕WordPress主题functions.php包含的恶意代码
  10. word电子签名工具_电子签名是您不会想到的必备工具的5个理由
  11. php小刀娱乐网源码,PHP精仿小刀娱乐网资源下载站网站整站源码
  12. 陈式新架一路八十三式口诀
  13. Undefined与Null的区别
  14. 学习专栏-关于Python读取数据学习记录
  15. 【渝粤题库】陕西师范大学201671 高级英语(二)
  16. Good Luck in CET-4 Everybody!(sg函数模板)
  17. 你会刷牙吗?图解正确刷牙方法
  18. MIMO均衡算法(CMA,LMS,RLS)原理介绍
  19. VR技术帮韩国妈妈与去世的女儿再相见,网友:堪比《黑镜》,人能瞬间崩溃...
  20. 【信息检索导论】第三章 容错式检索

热门文章

  1. 优化器是怎么得到执行计划的?
  2. leader选举的源码分析-Messenger
  3. 初步认识Volatile-MESI优化带来的可见性问题
  4. Redis的存储(实现)原理
  5. 共享锁和排它锁的用法
  6. POI导出人事报表:代码实现
  7. Stream流中的常用方法_map
  8. 使用Sidecar支持异构平台的微服务
  9. python3 数组重复数字,[python3] 3_01 数组中重复的数字
  10. 常见MOS管型号及参数对照表