题目描述

译自 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. 从数据库将数据导出到excel表格

    public class JxlExcel { public static void main(String[] args) { //创建Excel文件 String[] title= {" ...

  2. JAVA的一些笔记

    /*一般函数与构造函数的区别 构造函数:对象创建时,就会调用与之对应的构造函数,对对象进行初始化 一般函数:对象创建时,需要函数功能时才调用 构造函数:一个对象对象创建时,只调用一次 一般函数:对象创 ...

  3. java中变量和标识符名命名规范

    变量存放的是内存地址,当定义一个变量后,我们可以通过变量名找到该内存地址,可以修改该内存区间的值. 标识符的命名规范:首字母:字母,下划线,$符号:其余部分:数字,字母,下划线,$. 标识符应该避开j ...

  4. Spring Security OAuth2.0认证授权一:框架搭建和认证测试

    一.OAuth2.0介绍 OAuth(开放授权)是一个开放标准,允许用户授权第三方应用访问他们存储在另外的服务提供者上的信息,而不 需要将用户名和密码提供给第三方应用或分享他们数据的所有内容. 1.s ...

  5. 用python+sklearn(机器学习)实现天气预报数据 数据

    用python+sklearn机器学习实现天气预报 数据 项目地址 系列教程 勘误表 0.前言 1.爬虫 a.确认要被爬取的网页网址 b.爬虫部分 c.网页内容匹配取出部分 d.写入csv文件格式化 ...

  6. Es5数组新增的方法及用法

    1.forEachforEach是Array新方法中最基本的一个,就是遍历,循环.例如下面这个例子: [1, 2 ,3, 4].forEach(alert);等同于下面这个传统的for循环: var ...

  7. LeetCode374 猜数字大小

    我们正在玩一个猜数字游戏. 游戏规则如下:我从 1 到 n 选择一个数字. 你需要猜我选择了哪个数字.每次你猜错了,我会告诉你这个数字是大了还是小了.你调用一个预先定义好的接口 guess(int n ...

  8. playwright自动化项目搭建

    这是关于playwright系列介绍的最后一篇.搭建基于 playwright 的自动化项目. GitHub地址: https://github.com/defnngj/playwright-pro ...

  9. pytorch——不用包模拟简单线性预测,数据类型,创建tensor,索引与切片

    常见的学习种类 线性回归,最简单的y=wx+b型的,就像是调节音量大小.逻辑回归,是否问题.分类问题,是猫是狗是猪 最简单的线性回归y=wx+b 目的:给定大量的(x,y)坐标点,通过机器学习来找出最 ...

  10. U盘UEFI+GPT模式安装CentOS7.X系统

    1.制作CentOS7安装盘 还是老套路,开局先制作安装盘,UltraISO软碟通,上图   (1) 打开UltraISO软件,选择"文件"-> "打开" ...