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 题解 普及组难度的题都要想十几分 ...
随机推荐
- request.getContextPath()返回值问题
转自:http://blog.sina.com.cn/s/blog_6cbe0cff0101j6jl.html request.getContextPath()是在开发Web项目时,经常用到的方法,其 ...
- 论文翻译:2018_Deep Learning for Acoustic Echo Cancellation in Noisy and Double-Talk Scenarios
论文地址:深度学习用于噪音和双语场景下的回声消除 博客地址:https://www.cnblogs.com/LXP-Never/p/14210359.html 摘要 传统的声学回声消除(AEC)通过使 ...
- 数据库事务特性ACID
事务 事务(Transaction),一般是指要做的或所做的事情.在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit).在计算机术语中,事务通常就是指数据库事务. 概念 一 ...
- JavaCV FFmpeg采集麦克风PCM音频数据
前阵子用一个JavaCV的FFmpeg库实现了YUV视频数据地采集,同样的采集PCM音频数据也可以采用JavaCV的FFmpeg库. 传送门:JavaCV FFmpeg采集摄像头YUV数据 首先引入 ...
- 7.24,《C Primer Plus》复习第十五章第二小题
编写一个程序,通过命令行参数读取两个二进制字符串,对这两个二进制数使用~运算符,&运算符.|运算符,并以二进制字符串形式打印结果(如果无法使用命令行环境,可以通过交互式让程序读取字符串) 编写 ...
- 使用mono-repo实现跨项目组件共享
本文会分享一个我在实际工作中遇到的案例,从最开始的需求分析到项目搭建,以及最后落地的架构的整个过程.最终实现的效果是使用mono-repo实现了跨项目的组件共享.在本文中你可以看到: 从接到需求到深入 ...
- linux下用户管理命令、用户组管理命令
useradd 添加新用户 1.基本语法 useradd 用户名 (功能描述:添加新用户) useradd -g 组名 用户名 (功能描述:添加新用户到某 ...
- spark:distinct算子实现原理
distinct的底层使用reducebykey巧妙实现去重逻辑 //使用reduceByKey或者groupbykey的shuffle去重思想rdd.map(key=>(key,null)). ...
- springboot源码解析-管中窥豹系列之项目类型(二)
一.前言 Springboot源码解析是一件大工程,逐行逐句的去研究代码,会很枯燥,也不容易坚持下去. 我们不追求大而全,而是试着每次去研究一个小知识点,最终聚沙成塔,这就是我们的springboot ...
- NOIP初赛篇——03中央处理器CPU
CPU CPU(中央处理单元)是微机的核心部件,是决定微机性能的关键部件.20世纪70年代微型机的CPU问世,微型计算机的核心部件微处理器从Intel 4004,80286,80386,80486 ...