似乎弗洛伊德和迪杰斯特拉都干不了统计方案数,spfa的话就是不断入队就好。

#include <cstdio>
#include <cstring>
#include <queue>
#define get_hash(a,b) (a-1)*m+b
const int N=;
const int Inf=0x3f3f3f3f;
int t1[]={-,-,-,-,,,,},t2[]={-,-,,,,,-,-};
int f[N*N],dis[N*N],n,s[N][N],m,hash[N][N],S,E,all;
bool in[N*N],v[N][N],is[N*N],edge[N*N][N*N];
inline bool ok(int x,int y){
return x>&&x<=n&&y>&&y<=m&&s[x][y]!=;
}
struct V{
int to,next;
}c[N*N*N*N];
int head[N*N],t;
std::queue<int>q;
inline void add(int x,int y){
c[++t].to=y,c[t].next=head[x],head[x]=t;
}
void dfs(int x,int y){
if(v[x][y])return;
v[x][y]=;
for(int i=,p1,p2;i<;i++){
p1=x+t1[i],p2=y+t2[i];
if(ok(p1,p2)==false)continue;
if(s[p1][p2]==)dfs(p1,p2);
else is[hash[p1][p2]]=true;
}
}
void read_build(){
scanf("%d%d",&n,&m),all=n*m;
for(int i=;i<=n;i++)
for(int j=;j<=m;j++){
scanf("%d",&s[i][j]),hash[i][j]=get_hash(i,j);
if(s[i][j]==)S=hash[i][j];
if(s[i][j]==)E=hash[i][j];
}
for(int i=,p1,p2;i<=n;i++)
for(int j=;j<=m;j++)
if(s[i][j]!=&&s[i][j]!=)
if(s[i][j]==){
memset(is,,sizeof(is)),dfs(i,j);
for(int x=;x<=all;x++)
if(is[x]&&x!=E)
for(int y=;y<=all;y++)
if(x!=y&&is[y])
edge[x][y]=true;
}
else
for(int k=;k<;k++){
p1=t1[k]+i,p2=t2[k]+j;
if(ok(p1,p2)&&s[p1][p2]!=)
add(hash[i][j],hash[p1][p2]);
}
for(int i=;i<=all;i++)
for(int j=;j<=all;j++)
if(i!=j&&edge[i][j])
add(i,j);
}
void spfa_print(){
q.push(S),memset(dis,0x3f,sizeof(dis)),dis[S]=,f[S]=,in[S]=true;
while(!q.empty()){
int x=q.front();q.pop(),in[x]=false;
for(int i=head[x];i;i=c[i].next)
if(dis[x]+<dis[c[i].to]){
dis[c[i].to]=dis[x]+,f[c[i].to]=f[x];
if(in[c[i].to]==false)q.push(c[i].to),in[c[i].to]=true;
}
else if(dis[x]+==dis[c[i].to]){
f[c[i].to]+=f[x];
if(in[c[i].to]==false)q.push(c[i].to),in[c[i].to]=true;
}
}
if(f[E]==)printf("-1");
else printf("%d\n%d",dis[E]-,f[E]);
}
int main(){
read_build(),spfa_print();
return ;
}

【NOIP模拟赛】chess 建图+spfa统计方案数的更多相关文章

  1. NOIP模拟赛 6.29

    2017-6-29 NOIP模拟赛 Problem 1 机器人(robot.cpp/c/pas) [题目描述] 早苗入手了最新的Gundam模型.最新款自然有着与以往不同的功能,那就是它能够自动行走, ...

  2. CH Round #55 - Streaming #6 (NOIP模拟赛day2)

    A.九九归一 题目:http://ch.ezoj.tk/contest/CH%20Round%20%2355%20-%20Streaming%20%236%20(NOIP模拟赛day2)/九九归一 题 ...

  3. 11/1 NOIP 模拟赛

    11.1 NOIP 模拟赛 期望得分:50:实际得分:50: 思路:暴力枚举 + 快速幂 #include <algorithm> #include <cstring> #in ...

  4. NOIP模拟赛 by hzwer

    2015年10月04日NOIP模拟赛 by hzwer    (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...

  5. CH Round #49 - Streaming #4 (NOIP模拟赛Day2)

    A.二叉树的的根 题目:http://www.contesthunter.org/contest/CH%20Round%20%2349%20-%20Streaming%20%234%20(NOIP 模 ...

  6. NOIP模拟赛-2018.11.6

    NOIP模拟赛 今天想着反正高一高二都要考试,那么干脆跟着高二考吧,因为高二的比赛更有技术含量(我自己带的键盘放在这里). 今天考了一套英文题?发现阅读理解还是有一些困难的. T1:有$n$个点,$m ...

  7. Nescafe #29 NOIP模拟赛

    Nescafe #29 NOIP模拟赛 不知道这种题发出来算不算侵权...毕竟有的题在$bz$上是权限题,但是在$vijos$似乎又有原题...如果这算是侵权的话请联系我,我会尽快删除,谢谢~ 今天开 ...

  8. NOI.AC NOIP模拟赛 第四场 补记

    NOI.AC NOIP模拟赛 第四场 补记 子图 题目大意: 一张\(n(n\le5\times10^5)\)个点,\(m(m\le5\times10^5)\)条边的无向图.删去第\(i\)条边需要\ ...

  9. 2016-06-19 NOIP模拟赛

          2016-06-19 NOIP模拟赛 by coolyangzc 共3道题目,时间3小时 题目名 高级打字机 不等数列 经营与开发 源文件 type.cpp/c/pas num.cpp/c ...

随机推荐

  1. ELK 分布式日志实战

    一.  ELK 分布式日志实战介绍 此实战方案以 Elk 5.5.2 版本为准,分布式日志将以下图分布进行安装部署以及配置. 当Elk需监控应用日志时,需在应用部署所在的服务器中,安装Filebeat ...

  2. 11个简单实用技巧--Java性能调优

    多数开发人员认为性能优化是个比较复杂的问题,需要大量的经验和知识.是的,这并不没有错.诚然,优化应用程序以获得最好的性能并不是一件容易的事情,但这并不意味着你在没有获得这些经验和知识之前就不能做任何事 ...

  3. 分享一个工作中遇得到的sql(按每天每人统计拖车次数与小修次数)

    查询每人每天的数据 首先先建表 CREATE TABLE `user` ( `name` ) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CR ...

  4. 为什么我要放弃javaScript数据结构与算法(第三章)—— 栈

    有两种结构类似于数组,但在添加和删除元素时更加可控,它们就是栈和队列. 第三章 栈 栈数据结构 栈是一种遵循后进先出(LIFO)原则的有序集合.新添加的或待删除的元素都保存在栈的同一端,称为栈顶,另一 ...

  5. Koa基本使用

    简介 koa 是由 Express 原班人马打造的,致力于成为一个更小.更富有表现力.更健壮的 Web 框架. 使用 koa 编写 web 应用,通过组合不同的 generator,可以免除重复繁琐的 ...

  6. mysqli函数库的使用

    综述 1.什么是mysqli PHP-MySQL 函数库是 PHP 操作 MySQL 资料库最原始的扩展库,PHP-MySQLi 的 i 代表 Improvement ,相当于前者的增强版,也包含了相 ...

  7. python基础篇 07set集合 深浅拷贝

    本节主要内容:1. 基础数据类型补充2. set集合3. 深浅拷⻉ " ".join方法 循环删除列表中的内容:   错误的  原因:在for循环中,循环到第一个,然后删除,删除之 ...

  8. Python 3 学习笔记之——数据类型

    1. 数字 类型 int, float, bool, complex type() 查看变量类型 isinstance(a, int) 查看变量类型 运算符 % 取余 // 返回商的整数部分 ** 幂 ...

  9. [译]如何去除Git的unstaged的文件提示“old mode 100755 new mode 100644”?

    原文来源:https://stackoverflow.com/questions/1257592/how-do-i-remove-files-saying-old-mode-100755-new-mo ...

  10. 软工实践 - 第二十九次作业 Beta 冲刺(7/7)

    队名:起床一起肝活队 组长博客:https://www.cnblogs.com/dawnduck/p/10159251.html 作业博客:[班级博客本次作业的链接] (https://edu.cnb ...