题解 CF821D 【Okabe and City】
其实,这道题不用long long也能AC。
题意是给你一个矩阵,有一些格子被点亮有一些没有,每一次只能在被点亮的格子上面走。
然后你每一次都可以选择点亮一行或一排(非永久),现在问你最少点多少次可以走到终点?
思路十分好想。
我们把相邻的格子边权设为0,把不相邻但只差一行的格子之间边权设为1。(其他情况都不能直接到达)
然后跑一下SPFA就可以了。
但是需要考虑一个特例:终点有没有被点亮。
如果点了的话那没关系,没点的话得把(n+1,m+1)设为点亮的点。(要不然我们走不到终点不是吗)
AC代码如下:
11149ms/192kb
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<cmath>
using namespace std;
namespace StandardIO{template<typename T>inline void read(T &x){x=0;T f=1;char c=getchar();for(;c<'0'||c>'9';c=getchar())if(c=='-')f=-1;for(;c>='0'&&c<='9';c=getchar())x=x*10+c-'0';x*=f;}template<typename T>inline void write(T x){if(x<0)putchar('-'),x*=-1;if(x>=10)write(x/10);putchar(x%10+'0');}
}
using namespace StandardIO;
namespace Solve{const int N=10100;const int INF=0x3f3f3f3f;int n,m,k;struct node{int from,to;}edge[N];int dis[N],vis[N];inline int spfa(){for(register int i=1;i<=k;++i)dis[i]=INF;queue<int>q;q.push(1);vis[1]=1,dis[1]=0;while(!q.empty()){int to=q.front();q.pop();vis[to]=0;for(register int i=1;i<=k;++i){if(to==i)continue;int val=INF;int dx=abs(edge[to].from-edge[i].from),dy=abs(edge[to].to-edge[i].to);if(dx+dy==1)val=0;else if(dx<=2||dy<=2)val=1;if(dis[i]>dis[to]+val){dis[i]=dis[to]+val;if(!vis[i]){q.push(i),vis[i]=1;}}}}if(dis[k]!=INF)return dis[k];return -1;}inline void solve(){read(n),read(m),read(k);int flag=0;for(register int i=1;i<=k;++i){read(edge[i].from),read(edge[i].to);if(edge[i].from==n&&edge[i].to==m)flag=1;}if(!flag)edge[++k].from=n+1,edge[k].to=m+1;write(spfa());}
}
using namespace Solve;
int main(){solve();
}
转载于:https://www.cnblogs.com/ilverene/p/9850635.html
题解 CF821D 【Okabe and City】相关推荐
- CF 821D Okabe and City
题意:给你一个n*m的格子,然后给你一些亮光点的坐标,你开始在(1,1)这个点,每次你可以上下左右走,但是如果格子是黑的,你首先必须要点亮它,你每次可以点亮一行或者一列的所有格子.但是这个技能有两个需 ...
- CF821 D. Okabe and City 图 最短路
Link 题意:给出$n*m$大小的地图,已有$k$盏灯亮,人从左上角出发,右下角结束,期间必须走路灯点亮的地方,他可以在任意时刻消耗一枚硬币点亮一行或一列灯,他最多同时点亮一行或一列灯,要想点亮别的 ...
- E.Okabe and El Psy Kongroo
传送门 E. Okabe and El Psy Kongroo time limit per test 2 seconds memory limit per test 256 megabytes in ...
- czl蒻蒟的OI之路9
XJOI奋斗群蒻蒟群群赛10 RANK排名7 T1Chess TourneyWA一次后AC 题意 分析过程 给出题解 T2Luba And The TicketWA两次后AC 题意 分析过程 给出题解 ...
- czl蒻蒟的OI之路10、11、12
好久没有发微博了表示自己也很绝望啊今天来个三连击 XJOI奋斗群蒻蒟群群赛11 RANK排名11 T1The Wall WA一次后AC 题意 分析过程 给出题解 T2Maximal Area Quad ...
- codeforces round 420 div2 补题 CF 821 A-E
A Okabe and Future Gadget Laboratory 暴力 #include<bits/stdc++.h> using namespace std; typedef l ...
- Codeforces 821B Okabe and Banana Trees 题解
题意 给你一条直线y=-x/m+b,给定m和b,你可以在第一象限包括坐标轴的区域内直线下方包括直线上选取一点,以它为右上顶点,以坐标原点为左下顶点作矩形,可以退化成线段甚至点,问在它之内包括边上的整点 ...
- 题解 CF821C 【Okabe and Boxes】
一道模拟题 每一次 add 的时候,就不用管直接扔进栈里面,因为你在这个时候排个序不如之后 remove 的时候排序. 然后每一次 remove 的时候. 如果栈顶是当前要出栈的数,那么直接让他出去. ...
- 2017 ACM ICPC Asia Shenyang Regional Contest 题解(10 / 13)【每日亿题2 / 16】
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 A.(2017 ICPC shenyang I)Little Boxes B.(2017 ICP ...
最新文章
- python执行提示包找不到的问题
- 《响应式Web设计全流程解析》一1.2 静态设计稿舒适区
- Mysql主从异常 表被回滚_oracle表回滚到一个指定时间的操作语句 oracle 误删除数据恢复...
- 笔记-信息化与系统集成技术-供应链的特征
- enum 定义3个属性_和平精英:合金龙骨有3个隐藏属性,比玛莎“水下无敌”还唬人...
- Vue入门 ---- 简易留言板
- DNS协议及客户端实现
- springmvc5中设计模式
- HTML+CSS学习笔记(3)- 认识标签(2)
- docker打包部署flask镜像
- HDOJ 1251 HDU 1251 统计难题 ACM 1251 IN HDU
- 信息收集-目录扫描(7kbscan御剑版)下载及使用
- 用freeswitch建立呼叫中心系统的经验
- 小米手机如何升级Android版本,小米手机如何从稳定版升级到开发版
- 网站搭建:从零搭建个人网站教程(1)
- win10误删的注册表能还原吗_win10注册表删错了怎么办_win10注册表删错东西如何恢复-win7之家...
- 【附源码】计算机毕业设计JAVA智友少儿编程学习平台
- 【数据结构】图邻接矩阵的创建完整代码
- Pygame 轨道飞船实现飞船绕行星旋转
- 与 BGI 绘图库的兼容情况
热门文章
- 784-C语言rand和srand用法详解
- java数据结构队列杨辉三角_使用队列实现杨辉三角
- 等保测评漏洞扫描和渗透测试有什么区别?
- spring+quarts常见问题
- Android 美团批量打包新方案
- 说说kill和kill -9
- C++ 打印 vector
- 设计模式-结构型模式
- 执行下列python语句将产生的结果是x=2y=2.0_执行下列Python语句将产生的结果是____________。...
- 连锁餐饮企业应该如何管理