#420 Div2 D
#420 Div2 D
题意
给出一个方格矩阵,其中存在亮着的方格,只能在亮着的方格上行走,可以在初始亮的方格上花费一枚硬币临时点亮任意一行或一列,地图上同一时间只能存在一个这样的行或列,问走到终点最少花费的硬币。
分析
对可以行走的格子建图,如果格子相邻,花费为0,如果行差或列差小于等于2,则花费为1,否则就不能到达了。跑一遍 SPFA 即可。
code
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN = 10005;
const int INF = 0x3f3f3f3f;
int x[MAXN], y[MAXN];
int n, m, k;
queue<int> q;
int vis[MAXN];
int dis[MAXN];
int SPFA() {
while(!q.empty()) q.pop();
memset(vis, 0, sizeof vis);
memset(dis, 0x3f, sizeof dis);
dis[1] = 0;
vis[1] = 1;
q.push(1);
while(!q.empty()) {
int u = q.front(); q.pop();
vis[u] = 0;
for(int i = 1; i <= k; i++) {
if(i == u) continue;
int dx = abs(x[u] - x[i]), dy = abs(y[u] - y[i]);
int add = INF;
if(dx <= 2 || dy <= 2) add = 1;
if(dx + dy == 1) add = 0;
if(dis[i] > dis[u] + add) {
dis[i] = dis[u] + add;
if(!vis[i]) {
q.push(i);
vis[i] = 1;
}
}
}
}
if(dis[k] >= INF) dis[k] = -1;
return dis[k];
}
int main() {
cin >> n >> m >> k;
int f = 0;
for(int i = 1; i <= k; i++) {
cin >> x[i] >> y[i];
if(x[i] == n && y[i] == m) {
f = 1;
}
}
if(!f) {
x[++k] = n + 1;
y[k] = m + 1;
}
cout << SPFA() << endl;
return 0;
}
#420 Div2 D的更多相关文章
- #420 Div2 C
#420 Div2 C 题意 不断把数加入到一个栈里,取数的时候要求按照 1~n 的顺序取数,每次取数保证数一定在栈里,如果要取的数不在栈头,可以选择对栈排序一次.问最少排序几次. 分析 只要栈头的数 ...
- codeforces round 420 div2 补题 CF 821 A-E
A Okabe and Future Gadget Laboratory 暴力 #include<bits/stdc++.h> using namespace std; typedef l ...
- codeforces round #420 div2
A:暴力枚举 模拟 #include<bits/stdc++.h> using namespace std; ; int n; int a[N][N]; int main() { scan ...
- #420 Div2 Problem B Okabe and Banana Trees (math && 暴力枚举)
题目链接 :http://codeforces.com/contest/821/problem/B 题意 :给出 m 和 b 表示在坐标轴上的一条直线 要求你在这条直线和x.y轴围成的区域中找出一个 ...
- bc#54 div2
用小号做的div2 A:竟然看错了排序顺序...白白WA了两发 注意读入一整行(包括空格):getline(cin,st) [gets也是资瓷的 #include<iostream> us ...
- $('div a') 与$('div>a'),.div+.div2与.div~.div2
$('div a'):div标签下所有层次a元素的jquery对象 $('div>a'):div标签下子元素层次a元素的jquery对象 <body> <div class=' ...
- SRM 657 DIV2
-------一直想打SRM,但是感觉Topcoder用起来太麻烦了.题目还是英文,不过没什么事干还是来打一打好了.但是刚注册的号只能打DIV2,反正我这么弱也只适合DIV2了.. T1: 题目大意: ...
- CodeForces Round 192 Div2
This is the first time I took part in Codeforces Competition.The only felt is that my IQ was contemp ...
- Codeforce Round #211 Div2
真的是b到不行啊! 尼玛C题一个这么简单的题目没出 aabbccddee 正确的是aabccdee 我的是 aabcdee 硬是TM的不够用,想半天还以为自己的是对的... A:题... B:题. ...
随机推荐
- 【ZigZag Conversion】cpp
题目: The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows l ...
- SQL + Python 面试题:之二(难度:中等)
SQL + Python 面试题:之二(难度:中等)
- shell监控脚本
序言: 前几天一好友问我服务器监控怎么做?你们公司的监控是怎么做的?有什么开源的监控软件推荐?常见的开源的监控软件当然首先推荐ZABBIX,分布式够强大,而且很多公司都在用,我问他具体什么需求,能监控 ...
- Python全栈工程师(函数嵌套、变量作用域)
ParisGabriel 感谢 大家的支持 每天坚持 一天一篇 点个订阅 ...
- DAO设计模式的理解
为了降低耦合性,提出了DAO封装数据库操作的设计模式. 它可以实现业务逻辑与数据库访问相分离.相对来说,数据库是比较稳定的,其中DAO组件依赖于数据库系统,提供数据库访问的接口. 一般的DAO的封装由 ...
- Linux学习前的准备
Linux学习前的准备 Linux的学习也是这次项目的一个点. 我的学习教材是 The Linux Command Line,这是本已经被翻译好了的 中英版本的教材,知识点还是比较入门的 我使用的是 ...
- PAT 甲级 1011 World Cup Betting
https://pintia.cn/problem-sets/994805342720868352/problems/994805504927186944 With the 2010 FIFA Wor ...
- PHP7 深入理解
读 PHP7的内核剖析 php7-internal 记录 3 PHP的相关组成 3.1 SAPI php常见的四种运行模式 SAPI:Server Application Programming In ...
- linux服务进程管理
1.查看linux占用内存/CPU最多的进程 查使用内存最多的10个进程 ps -aux | sort -k4nr | head -n 10 或者top (然后按下M,注意大写) 查使用CPU最多的1 ...
- Vue,watch观察对象中的某个属性的变化
你只需要属性这样写,用引号引起来