LOJ2632
译自 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的更多相关文章
- bzoj2346 & loj2632 [Baltic 2011]Lamp 最短路
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=2346 https://loj.ac/problem/2632 题解 普及组难度的题都要想十几分 ...
随机推荐
- 在jsp页面动态添加,删除文本框模块
jsp代码============ <table class="crud-content-info" > <tr > <td align=" ...
- Head First 设计模式 - 01. 策略 (Strategy) 模式
当涉及到"维护"时,为了"复用"目的而使用继承,结局并不完美 P4 对父类代码进行修改时,影响层面可能会很大 思考题 利用继承来提供 Duck 的行为,这会导致 ...
- MySQL/MariaDB二进制安装
本文说明MySQL/MariaDB二进制安装的过程 mysql和mariadb的安装方式基本一致,唯一初始化方式有点不一样 1.规划: 数据文件存储位置 /data/my ...
- 项目实战--解决运行sql文件错误
说明: 新项目启动,通过公司运维同学给的数据库脚本在Navicat中建项目的数据库,运行脚本时报错 Error Code: 1227. Access denied; you need (at leas ...
- 从零开始的C程序设计大作业——学生成绩管理系统
前言 学生成绩管理系统可以说是C语言程序设计的结课的必备大作业了.花了些时间,费了些头发肝了下,完成了两个系统,一个是控制台版本的,另一个用easyx图形库进行了优化. 先放出完成后的演示图片占个坑. ...
- Navcat连接Mysql报错1521
原因是新版的MySql密码加密算法改变,导致旧版本的Navcat连接报错. 解决方案: 1.升级Navcat 因为只是本地的Mysql,所以没验证这个方法,网传可以,此处不介绍. 2.修改Mysql加 ...
- 实现strStr
Implement strStr(). Return the index of the first occurrence of needle in haystack, or -1 if needle ...
- Spring框架之websocket源码完全解析
Spring框架之websocket源码完全解析 Spring框架从4.0版开始支持WebSocket,先简单介绍WebSocket协议(详细介绍参见"WebSocket协议中文版" ...
- vim 手动添加脚本头部信息
vim /root/.vimrc 8,1 全部 set autoindent set tabstop=5 set shiftwidth=4 function AddTitle() call setli ...
- python模块详解 | unittest(单元测试框架)(持续更新中)
目录: why unittest? unittest的四个重要概念 加载测试用例的三个方法 自动加载测试用例 忽略测试和预期失败 生成html测试报告 why unittest? 简介: Unitte ...