HDU - 4370 0 or 1(思维+最短路)
题目链接:点击查看
题目大意:给定一个n*n的矩阵,需要构造出一个n*n的矩阵,规定矩阵只能由0或1组成,使得最小。
题目解析:题意很明确,但是却很抽象,我们需要从图论的角度来看待三个初始条件:
假设此时的n为4:
- :表示点1的出度为1
- :表示点n的入度为1
- :表示点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(思维+最短路)相关推荐
- R - 0 or 1 HDU - 4370
R - 0 or 1 HDU - 4370 题意: 给你一个邻接矩阵,让你求出从满足条件的答案, 条件如下: 1 的出度为 1, 入度不一定 n 的入度为 1, 出度不一定 其余点的 出度 == 入度 ...
- 【HDU - 2112】 HDU Today(dijkstra单源最短路 + map转换)
题干: HDU Today Time Limit : 15000/5000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Tota ...
- hdu 2066 一个人的旅行(最短路)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2066 Problem Description 虽然草儿是个路痴(就是在杭电待了一年多,居然还会在校园里 ...
- HDU 4276 The Ghost Blows Light 最短路+树形背包
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=4276 目录 题意 分析 Code 题意 有一棵树,每个节点都有财富wi,每条边都会花费ci的时间,问你 ...
- HDU 6092 Rikka with Subset 思维 递推
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=6092 题目描述: 给你一个集合的所有子集各个和, 让你找到这个集合, 输出字典序最小 解题思路: 下 ...
- HDU 2066-一个人的旅行(最短路Dijkstra)
一个人的旅行 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- Deleting Edges 思维 最短路 删边
题意 :给一有向图,删去图中某些边(可以不删),使剩下的边构成一颗树,且0号点到每个点的距离依然为原图中0号点到每个点的最短距离.求删边的方案数,即新图所有可能性的方案数. 思路 :先用dijkstr ...
- HDU - 6071 Lazy Running 同余最短路 + 分层
传送门 题意: 给定四个点构成一个环,给出四个点之间的距离,让后从222号点出发,最终回到222号点,求经过的距离>=k>=k>=k的最小距离. 思路: 由于从222开始,最终在22 ...
- codeforces773 D. Perishable Roads(思维+最短路)
D. Perishable Roads 题意简述: 一个 nnn 个点的完全图 以 iii 为根节点时 询问 能构造的树的 ∑d(x)\sum d(x)∑d(x) 最小是多少. d(x)d(x)d(x ...
最新文章
- SAP零售行业解决方案初阶 1
- 继续说说美国互联网版权监管法案(SOPA)
- 聚类算法 sklearn k_means (返回一维数据的最优聚类)
- 配置token_Nginx常用的配置
- 设计模式---组合模式
- C++的文艺复兴: Why C++? 王者归来
- Java-eclipse快捷键及设置
- OpenShift 4 - 基于Memory的HPA
- functions.php隐藏恶意代码,警惕WordPress主题functions.php包含的恶意代码
- word电子签名工具_电子签名是您不会想到的必备工具的5个理由
- php小刀娱乐网源码,PHP精仿小刀娱乐网资源下载站网站整站源码
- 陈式新架一路八十三式口诀
- Undefined与Null的区别
- 学习专栏-关于Python读取数据学习记录
- 【渝粤题库】陕西师范大学201671 高级英语(二)
- Good Luck in CET-4 Everybody!(sg函数模板)
- 你会刷牙吗?图解正确刷牙方法
- MIMO均衡算法(CMA,LMS,RLS)原理介绍
- VR技术帮韩国妈妈与去世的女儿再相见,网友:堪比《黑镜》,人能瞬间崩溃...
- 【信息检索导论】第三章 容错式检索