洛谷P2243 电路维修
转化为图论问题
对于每个交叉点(X,Y)抽象成节点。与它相邻的四个点中,可以直接连线的边权为0,否则边权为1。
用死了的SPFA解决图论问题。
#include <cstring>
#include <cstdio>
#define GC getchar()
#define Clean(X,K) memset(X,K,sizeof(X))
#define re register
#define Hash(X,Y) ((X)*(M+1)+(Y))
using namespace std ;
int Qread () {
int X = ;
char C = GC ;
while (C > '' || C < '') C = GC ;
while (C >='' && C <='') {
X = X * + C - '' ;
C = GC ;
}
return X ;
}
const int Maxn = , INF = ;
int Times , N , M , Head[Maxn * Maxn] , En = , Q[Maxn * Maxn] , Mdis[Maxn * Maxn], Vis[Maxn * Maxn];
struct Edge {
int From , Goto , NextEdge , Len ;
};
Edge E[Maxn * Maxn * ] ;
void Adg (int X , int Y ,int L) {
E[++En].From = X ;
E[En].Goto = Y ;
E[En].Len = L ;
E[En].NextEdge = Head[X] ;
Head[X] = En ;
}
int SPFA () {
re int H = , T = ;
Clean(Vis , ) , Clean(Mdis , 0x3f) ;
const int St = Hash( , ) , Top = (N + ) * (M + );
if (++T > Top) T = ;
Q[T] = St , Mdis[St] = , Vis[St] = ;
while (H != T) {
if (++ H > Top) H = ;
const int Now = Q[H] ;
Vis[Now] = ;
for (re int i = Head[Now ] ; i ; i = E[i].NextEdge ) {
int Dis = Mdis[Now] + E[i].Len ;
if (Dis < Mdis[E[i].Goto ]) {
Mdis[E[i].Goto ] = Dis ;
if (!Vis[E[i].Goto ]) {
Vis[E[i].Goto ] = ;
if (++ T > Top) T = ;
Q[T] = E[i].Goto ;
}
}
}
}
return Mdis[Hash(N , M)] ;
}
int main () {
//freopen ("P2243.in" , "r" , stdin) ;
Times = Qread () ;
while (Times -- ) {
N = Qread () , M = Qread () ;
Clean (Head , ) , En = ;
for (re int i = ; i < N ; ++ i) {
for (re int j = ; j < M; ++ j) {
char C = GC ;
while (C !='\\' && C !='/') C = GC ;
if (C == '/') {
Adg (Hash(i + , j + ) , Hash (i , j) , ) ;
Adg (Hash (i , j) ,Hash(i + , j + ) , ) ;
Adg (Hash(i + , j) , Hash (i , j + ) , ) ;
Adg (Hash (i , j + ) ,Hash(i + , j) , ) ;
} else if (C == '\\') {
Adg (Hash(i + , j + ) , Hash (i , j) , ) ;
Adg (Hash (i , j) ,Hash(i + , j + ) , ) ;
Adg (Hash(i + , j) , Hash (i , j + ) , ) ;
Adg (Hash (i , j + ) ,Hash(i + , j) , ) ;
}
}
}
int Ans = SPFA() ;
if (Ans < INF)printf ("%d\n" , Ans) ;
else printf ("NO SOLUTION\n") ;
}
fclose (stdin) , fclose (stdout) ;
return ;
}
洛谷P2243 电路维修的更多相关文章
- 洛谷 P2243 电路维修
P2243 电路维修 题目背景 Elf 是来自Gliese 星球的少女,由于偶然的原因漂流到了地球上.在她无依无靠的时候,善良的运输队员Mark 和James 收留了她.Elf 很感谢Mark和Jam ...
- 洛谷P2243 电路维修 [最短路]
题目传送门 电路维修 题目背景 Elf 是来自Gliese 星球的少女,由于偶然的原因漂流到了地球上.在她无依无靠的时候,善良的运输队员Mark 和James 收留了她.Elf 很感谢Mark和Jam ...
- 【Dijkstra堆优化】洛谷P2243电路维修
题目背景 Elf 是来自Gliese 星球的少女,由于偶然的原因漂流到了地球上.在她无依无靠的时候,善良的运输队员Mark 和James 收留了她.Elf 很感谢Mark和James,可是一直也没能给 ...
- 洛谷P2242 公路维修问题
To 洛谷.2242 公路维修问题 题目描述 由于长期没有得到维修,A国的高速公路上出现了N个坑.为了尽快填补好这N个坑,A国决定对M处地段采取交通管制.为了求解方便,假设A国的高速公路只有一条,而且 ...
- P2243 电路维修
P2243 电路维修 题目背景 Elf 是来自Gliese 星球的少女,由于偶然的原因漂流到了地球上.在她无依无靠的时候,善良的运输队员Mark 和James 收留了她.Elf 很感谢Mark和Jam ...
- 洛谷 P2242 公路维修问题
P2242 公路维修问题 题目描述 由于长期没有得到维修,A国的高速公路上出现了N个坑.为了尽快填补好这N个坑,A国决定对M处地段采取交通管制.为了求解方便,假设A国的高速公路只有一条,而且是笔直的. ...
- 洛谷P2242 公路维修问题(Road)
题目描述 在一个夜黑风高,下着暴风雨的夜晚,farmer John的牛棚的屋顶.门被吹飞了. 好在许多牛正在度假,所以牛棚没有住满. 牛棚一个紧挨着另一个被排成一行,牛就住在里面过夜. 有些牛棚里有牛 ...
- Luogu P2243 电路维修 双端队列BFS
当转移的代价是0和一个分明不同的权值时,可以用双端队列BFS去跑(你跑最短路也没问题..QWQ) 而对于这道题,边旋转代价是1,不旋转代价是0:可以直接建图最短路,也可以跑BFS 这个题建图很有意思: ...
- 洛谷 P2317 [HNOI2005]星际贸易 解题报告
P2317 [HNOI2005]星际贸易 题目描述 输入输出格式 输入格式: 输出格式: 如果可以找到这样的方案,那么输出文件output.txt中包含两个整数X和Y.X表示贸易额,Y表示净利润并且两 ...
随机推荐
- [Leetcode]100. Same Tree -David_Lin
Given two binary trees, write a function to check if they are equal or not. Two binary trees are con ...
- Java开发知识之Java编程基础
Java开发知识之Java编程基础 一丶Java的基础语法 每个语言都有自己的语法规范.例如C++ 入口点是main. 我们按照特定格式编写即可. Java也不例外. Java程序的语法规范就是 Ja ...
- 如何使用kafka增加topic的备份数量,让业务更上一层楼
本文由云+社区发表 一.困难点 建立topic的时候,可以通过指定参数 --replication-factor 设置备份数量.但是,一旦完成建立topic,则无法通过kafka-topic.sh 或 ...
- Spring Boot(五):Spring Boot Jpa 的使用
在上篇文章Spring Boot(二):Web 综合开发中简单介绍了一下 Spring Boot Jpa 的基础性使用,这篇文章将更加全面的介绍 Spring Boot Jpa 常见用法以及注意事项. ...
- 原型模式 prototype 创建型 设计模式(七)
原型模式 prototype 意图 用原型实例指定需要创建的对象的类型,然后使用复制这个原型对象的方法创建出更多同类型的对象 显然,原型模式就是给出一个对象,然后克隆一个或者更多个对象 小时候看 ...
- 痞子衡嵌入式:一表全搜罗常见短距离无线通信协议(Wi-Fi/Bluetooth/ZigBee/Thread...)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是常见短距离无线通信协议. 短距离无线通信是物联网的基础,随着物联网IoT的火热发展,各种短距离无线通信协议也是层出不穷,这些协议标准各有 ...
- JavaScript 基础结构
注释 代码注释可以使用//或者/* */ // 这是一个单行注释 /* * 这是 * 一个 * 多行 * 注释 */ 变量 变量用于存储数据,在同一作用域内变量不得重名,定义语法: ...
- ASP.NET Web API决跨域问题
记录最近一次的项目开发中遇到的问题和解决方式.在给移动端开放数据接口的时候,移动端开放人员反映部署到测试环境的接口调用访问出现了问题,但是在单独进行访问是可以正常的.那么,问题就来了. 根据查询园子里 ...
- BN算法
批量归一化(BN: Batch Normalization) 1 BN训练 1)随机梯度下降法(SGD)对于训练深度网络简单高效,但是它有个毛病,就是需要我们人为的去选择参数,比如学习率.参数初始化. ...
- Centos7.3安装和配置Mysql5.7
主要转自这篇文章:https://www.cnblogs.com/wishwzp/p/7113403.html 这篇文章已经讲的很详细,亲测可用,对于基本不懂linux的小白应该也能看得懂.只是没有修 ...