题目描述

译自 BalticOI 2011 Day1 T3「Switch the Lamp On」
有一种正方形的电路元件,在它的两组相对顶点中,有一组会用导线连接起来,另一组则不会。
有  个这样的元件,你想将其排列成  行  列放在电路板上。电路板的左上角连接电源,右下角连接灯泡。

试求:至少要旋转多少个正方形元件才能让电源与灯泡连通,若无解则输出 。

________________________________________

每一个方格有一对对角线被连接,那么连接的两个连得距离为0,没有连接的两个点的距离为1(需要一次操作可以连通)。

求左上角点到右下角点的最短距离就可以了!

spfa,最好优化一下!

________________________________________

 1 #include<bits/stdc++.h>
2 using namespace std;
3 const int maxn=503*503+10;
4 const int maxm=503*503*4+10;
5 int t,n,m;
6 struct edge
7 {
8 int u,v,w,nxt;
9 }e[maxm];
10 int head[maxn],js;
11 void addage(int u,int v,int w)
12 {
13 e[++js].u=u;e[js].v=v;e[js].w=w;
14 e[js].nxt=head[u];head[u]=js;
15 }
16 char s[505];
17 int dis[maxn];
18 deque<int>q;
19 bool inq[maxn];
20 int spfa()
21 {
22 dis[1]=0;
23 memset(inq,0,sizeof inq);
24 inq[1]=1;
25 q.push_back(1);
26 while(!q.empty())
27 {
28 int u=q.front();q.pop_front();inq[u]=0;
29 for(int i=head[u];i;i=e[i].nxt)
30 {
31 int v=e[i].v;
32 if(dis[v]>dis[u]+e[i].w)
33 {
34 dis[v]=dis[u]+e[i].w;
35 if(!inq[v])
36 {
37 if(!q.empty()&&dis[v]<=dis[q.front()])q.push_front(v);
38 else q.push_back(v);
39 inq[v]=1;
40 }
41 }
42 }
43 }
44 return dis[(n+1)*(m+1)];
45 }
46 int main()
47 {
48
49 js=0;
50 memset(head,0,sizeof head);
51 memset(dis,0x3f,sizeof dis);
52 scanf("%d%d",&n,&m);
53 for(int i=0;i<n;++i)
54 {
55 scanf("%s",s);
56 int l=strlen(s)+1;
57 for(int j=0;s[j];++j)
58 {
59 if( s[j]== '\\' )
60 {
61 int a=i*l+j+1,b=(i+1)*l+j+2;
62 addage(a,b,0);addage(b,a,0);
63 addage(a+1,b-1,1);addage(b-1,a+1,1);
64 }
65 else
66 {
67 int a=i*l+j+2,b=(i+1)*l+j+1;
68 addage(a,b,0);addage(b,a,0);
69 addage(a-1,b+1,1);addage(b+1,a-1,1);
70 }
71 }
72 }
73 int tp=spfa();
74 if(tp!=0x3f3f3f3f)printf("%d\n",tp);
75 else puts("NO SOLUTION");
76
77 return 0;
78 }

LOJ2632的更多相关文章

  1. bzoj2346 & loj2632 [Baltic 2011]Lamp 最短路

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=2346 https://loj.ac/problem/2632 题解 普及组难度的题都要想十几分 ...

随机推荐

  1. MongoDB插入数据,除去Class key

    本文来源于: 来源:CSDN 原文:https://blog.csdn.net/ClementAD/article/details/50849680 去除class字段的本质为设置 DefaultMo ...

  2. Linux 网络排错检查思路

    Linux 网络排错检查思路 graph TD A[当网络不通时] --> B{ping想要访问的地址,<br>如www.runoob.com} B --> |不通| C{pi ...

  3. canvas--总结一

    一.什么是Canvas? HTML5的canvas元素使用JavaScript在网页上绘制图像: 画布是一个矩形区域,可以控制其每一像素: canvas拥有多种绘制路径,矩形,圆形,字符以及添加图像的 ...

  4. linux based bottlerocket-os

    linux based bottlerocket-os 概要 aws开源,专注与运行容器的linux os 参看 https://github.com/bottlerocket-os

  5. Linux设备上没有空间之复盘

    某天前端在调接口的时候,发现登录页面得验证码接口居然没有响应数据,显示的是500响应码.于是我一路排查,首先排查验证码接口所属的微服务是否正常,通过lsof -i:服务端口进行排查,发现该微服务进程存 ...

  6. 并发编程--锁--volatile

    在讲volatile关键字之前我们先了解Java的内存模型,Java内存模型规定所有的变量都是存在主存当中,每个线程都有自己的工作内存.线程对变量的所有操作都必须在自己的工作内存中进行,而不能直接对主 ...

  7. 【Git】命令行操作

    Git 命令行操作 1 本地库初始化 git init:初始化本地仓库 效果 注意:.git目录中存放的是本地库相关的子目录和文件,不要删除,也不要胡乱修改. 2 设置签名 形式: 用户名:tom E ...

  8. 【Java基础】基本语法-程序流程控制

    基本语法-程序流程控制 程序流程控制 流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组合成能完成一定功能的小逻辑模块. 其流程控制方式采用结构化程序设计中规定的三种基本流程结构,即: 顺 ...

  9. LeetCode225 用队列实现栈

    使用队列实现栈的下列操作: push(x) -- 元素 x 入栈 pop() -- 移除栈顶元素 top() -- 获取栈顶元素 empty() -- 返回栈是否为空 注意: 你只能使用队列的基本操作 ...

  10. Sentry(v20.12.1) K8S 云原生架构探索,SENTRY FOR JAVASCRIPT Source Maps 详解

    系列 Sentry-Go SDK 中文实践指南 一起来刷 Sentry For Go 官方文档之 Enriching Events Snuba:Sentry 新的搜索基础设施(基于 ClickHous ...