Luogu P3956

本题是一道简单的SPFA

具体看程序

#include<iostream>
#include<cstdio>
using namespace std;
const int wayx[4]={1,0,-1,0},wayy[4]={0,1,0,-1};//4个方向
int n,m,cost[200][200],a[200][200],magic[200][200],x,y,c;
bool visit[200][200];//标志某个点有没有在队列里面
struct data
{
int x,y;
}que[100000];//队列内的点的坐标
void first()
{
for (int i=1;i<=m;i++)
for (int j=1;j<=m;j++)
cost[i][j]=2147483640;
cost[1][1]=0;
//初始化,起点价值为0,其他均为无穷大
}
void spfa()//程序主体 SPFA
{
int head=0,tail=1;
que[head].x=1;que[head].y=1;
visit[1][1]=true;
while (head!=tail)
{
int nowx=que[head].x,nowy=que[head].y;
if (magic[nowx][nowy]) a[nowx][nowy]=magic[nowx][nowy];
//如果这个点用过魔法,那么让这个点标记为变的颜色
for (int i=0;i<4;i++)
{
int movex=nowx+wayx[i],movey=nowy+wayy[i],nowc=0;
if (movex<0||movex>m) continue;
if (movey<0||movey>m) continue;
//防止越界
if (a[movex][movey]==1&&a[nowx][nowy]==2) nowc+=1;
if (a[movex][movey]==2&&a[nowx][nowy]==1) nowc+=1;
if (a[movex][movey]==0)
{ if (magic[nowx][nowy]) nowc=cost[movex][movey]-cost[nowx][nowy]+1;
else
{
nowc+=2;
}
}
if (cost[movex][movey]>cost[nowx][nowy]+nowc)//松弛
{
if (!visit[movex][movey])
{
que[tail].x=movex;
que[tail].y=movey;
tail++;
visit[movex][movey]=true;
}
cost[movex][movey]=cost[nowx][nowy]+nowc;
if (nowc==2) magic[movex][movey]=a[nowx][nowy];
}
}
visit[nowx][nowy]=false;
if (magic[nowx][nowy]) a[nowx][nowy]=0;
magic[nowx][nowy]=0;
head++;
}
}
int main()
{
cin>>m>>n;
for (int i=1;i<=n;i++)
{
cin>>x>>y>>c;
a[x][y]=c+1;
}
first();
spfa();
if (cost[m][m]==2147483640) cout<<-1;//即没有路径可以到达终点
else cout<<cost[m][m];
return 0;
}

【NOIP2017】【Luogu P3956】【SPFA】棋盘的更多相关文章

  1. [luogu P1169] [ZJOI2007]棋盘制作

    [luogu P1169] [ZJOI2007]棋盘制作 题目描述 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个8*8大小的 ...

  2. [luogu]P1169 [ZJOI2007]棋盘制作[DP][单调栈]

    [luogu]P1169 [ZJOI]棋盘制作 ——!x^n+y^n=z^n 题目描述 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋 ...

  3. 悬线法 || BZOJ 1057: [ZJOI2007]棋盘制作 || Luogu P1169 [ZJOI2007]棋盘制作

    题面:P1169 [ZJOI2007]棋盘制作 题解: 基本是悬线法板子,只是建图判断时有一点点不同. 代码: #include<cstdio> #include<cstring&g ...

  4. 【洛谷p3956】棋盘

    日常blog(✧◡✧) 棋盘[题目链接] 算法: 然后这是2017普及组: first.关于颜色处理:让c[i][j]=color+1:这样无色=0,红色=1,黄色=2: 然后其实是记忆化,将记答案的 ...

  5. Luogu 1169 [ZJOI2007]棋盘制作 - 动态规划+单调栈

    Description 给一个01矩阵, 求出最大的01交错的正方形和最大的01交错的矩阵 Solution 用动态规划求出最大的正方形, 用单调栈求出最大的矩阵. 在这里仅介绍求出最大正方形(求最大 ...

  6. 【Luogu】P1169棋盘制作(单调栈)

    题目链接 唉……这种题放在NOIP以前我是会做的……但是为什么现在反而不会了…… 单调栈.预处理每个点向上能扩展的最大距离,左右用两遍单调栈扫一遍.注意边界. #include<cstdio&g ...

  7. [NOIp2017] luogu P3952 时间复杂度

    跪着看评测很优秀. 题目描述 给你若干个程序,这些程序只有 For 循环,求这些程序的时间复杂度. Solution 大模拟.讲下细节. flag[i]flag[i]flag[i] 表示第 iii 位 ...

  8. luogu 1169 [ZJOI2007]棋盘制作 悬线dp

    悬线法,虽然得不到局部最优解,但是一定能得到全局最优解的算法,十分神奇~ #include <cstdio> #include <algorithm> #define N 20 ...

  9. 【Luogu】P1436 棋盘分割 题解

    嗯,点开题目,哇!是一道闪亮亮的蓝题! 不要被吓到了,其实,这道题就是一个简单的DP啦! 我们设 \(f[x1][y1][x2][y2][c]\) 为以 \((x1,y1)\) 为左上角,以 \((x ...

随机推荐

  1. C#控件的简单应用

    listview 创建columns: ImageList imgList = new ImageList(); imgList.ImageSize = , ); FaceListview.Small ...

  2. IntelliJ IDEA 配置Maven仓库

    1. 下载Maven 官方地址:http://maven.apache.org/download.cgi 2. 修改本地仓库路径 3. 设置环境变量 MAVEN_HOME: E:\DevelopEnv ...

  3. yii2中commands的简单应用

    class HelloController extends Controller { /** * This command echoes what you have entered as the me ...

  4. 学习笔记34_EF上下文管理

    *上下文对象dbContext最好不要频繁的使用Using(var dbContext = new ....):那么就会产生过多的数据库交互:而且每个dbContext中村的数据,由于操作不同,数据可 ...

  5. 强大的CompletableFuture

    引子 为了让程序更加高效,让CPU最大效率的工作,我们会采用异步编程.首先想到的是开启一个新的线程去做某项工作.再进一步,为了让新线程可以返回一个值,告诉主线程事情做完了,于是乎Future粉墨登场. ...

  6. [考试反思]1023csp-s模拟测试83:等候

    分数倒是依旧那么烂,但是这个时间比较诡异. 6分49秒弄出T1,15分钟送上T2的50分暴力,不到一小时半的时候T3的30分暴力也完成了... 在85分钟之后一次提交也没有 前15分钟平均每分钟得10 ...

  7. 7.25 NOIP模拟8

    这次考试前面状态还行,后两个小时真是一言难尽,打了个T3的n^2暴力就懵逼了,不知道怎么优化. T1.匹配 看了一边题发现不太懂(这不是考试的难度啊),然后水完T2后回来5分钟水过,非常愉快的一道题. ...

  8. vim编辑器介绍

    所有的 Unix Like 系统都会内建 vi 文书编辑器,其他的文书编辑器则不一定会存在. 但是目前我们使用比较多的是 vim 编辑器. vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正 ...

  9. java.io.StreamCorruptedException: invalid stream header: 00000000

    Caused by: java.io.StreamCorruptedException: invalid stream header: 00000000 at java.io.ObjectInputS ...

  10. What's your name?

    Hello. My name is james. What's your name? Hi, I'm Jessica. Nice to meet you. Nice to meet you, too. ...