洛谷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表示净利润并且两 ...
随机推荐
- ASP.NET Core 框架源码地址
ASP.NET Core 框架源码地址 https://github.com/dotnet/corefx 这个是.net core的 开源项目地址 https://github.com/aspnet ...
- Qt实现半透明遮罩效果
本文索引: 需求 原理 实现遮罩控件 遮罩的使用 需求 我们在显示一些模态对话框的时候,往往需要将对话框的背景颜色调暗以达到突出当前对话框的效果,例如: 对话框的父窗口除了标题栏以外的部分都变暗了,在 ...
- Odd-e CSD Course Day 2
首先在第二天中其實談的更多的是在於 Test-Driven 的部分,而第一天談的偏向如何寫出一個好的 A-TDD 案例 但在第二天開始,就不太會照固定的 Topic 進行講述,而且讓團隊成員就像一個真 ...
- MyCat做MySQL负载均衡(享学课堂,咕泡学院听课笔记)
不要用战术上的勤奋,掩盖战略上的懒惰. 一.数据库集群演示 演示的数据库的表分了三种, 1.配置表,存储一些配置文件,其他业务表需要关联读取,每个数据库都存储配置表的全部内容,即操作Mycat,所有集 ...
- [Go] golang的range循环遍历通道
range循环会无限在channels上面迭代 package main import ( "fmt" "time" ) func main() { //创建一 ...
- MongoDB初了解——用户权限
本文所述MongoDB版本为4.0.5,笔者对MongoDB刚接触,对各个版本的MongoDB不甚了解,本文不对该版本的MongoDB做特性介绍,所涉及命令也许对其余版本不适用. 因为目前有一个试验性 ...
- 原生JS实现简易轮播图
原生JS实现简易轮播图(渐变?) 最近做网页总是会用到轮播图,我就把之前写的轮播图单独拿出来吧,如果有...如果真的有人也需要也可以复制去用用啊..哈~.. window.onload = funct ...
- python 练习 simple_server 判断路径及返回函数
函数 routers 返回一个 urlpatterns 元组,里面包含了路径名和函数名:在 函数 application 中遍历 urlpatterns 元组,路径存在则返回函数名,不存在则返回 40 ...
- 面板JPanel,滚动面板JScrollPane,文本域JTextArea
[面板JPanel] 面板就是一个容器 每一个容器都可以有一个自己的独立的布局和组件,这些容器之间也不会互相干扰 //导入Java类 import javax.swing.*; import java ...
- 基于WanAndroid开放API实现的文章阅读APP
简介 基于WanAndroid开放API开发的技术文章阅读App.主要功能包括:首页.体系.项目.公众号.搜索.登录.收藏.夜间模式等. 用到的第三方框架 RxJava RxAndroid Retro ...