bzoj2346[Baltic 2011]Lamp
Description
2255是一个傻X,他连自己家灯不亮了都不知道。
某天TZ大神路过他家,发现了这一情况,
于是TZ开始行侠仗义了。
TZ发现是电路板的问题,
他打开了电路板,发现线路根本没有连上!!
于是他强大的脑力可以使某个格子上的线路从\变为/,
或者从/变为\。
2255不会电路(因为他什么都不会),但是他想知道TZ最少要用多少次脑力才能使他家的灯变亮。
如果无法变亮,输出“NO SOLUTION”。
n,m<=500
Input
Output
Sample Input
\\/\\
\\///
/\\\\
Sample Output
……我是弱渣……原来以为是各种流乱搞,结果ksy学长告诉我是最短路
如果符号是“/”左下方的点向右上方的点连边权为0的边,左上方向右下方连边权为1的边
如果符号是“\”左上方的点向右下方的点连边权为0的边,左下方向右上方连边权为1的边
然后上最短路……别忘了加双向边
25w的点Dj+堆可以秒过,但是SPFA呵呵呵……不过我有特殊的优化SPFA的方法
要用SLF优化,就是更新的时候如果当前更新的dist比正在做的dist小,就把它放在队头。具体看代码,还不会的自行百度
#include<iostream>
#include<cstdio>
#include<cstring>
#define inf 127/3
#define mod 1000007
using namespace std;
struct edge{
int next,to,v;
}e[3000010];
int cnt;
int head[260000];
inline void ins(int u,int v,int w)
{
e[++cnt].to=v;
e[cnt].v=w;
e[cnt].next=head[u];
head[u]=cnt;
}
inline void insert(int u,int v,int w)
{
ins(u,v,w);
ins(v,u,w);
}
int n,m,t,w=1;
char ch;
int dist[260000];
bool flag[260000];
int q[mod];
inline void spfa()
{
memset(dist,inf,sizeof(dist));
int now;q[1]=1;dist[1]=0;flag[1]=1;
while (t!=w)
{
t=(t+1)%mod;
now=q[t];
for (int i=head[now];i;i=e[i].next)
if (dist[now]+e[i].v<dist[e[i].to])
{
dist[e[i].to]=dist[now]+e[i].v;
if (!flag[e[i].to])
{
if(dist[now]>=dist[e[i].to])
{
q[t]=e[i].to;
flag[e[i].to]=1;
t=(t-1+mod)%mod;
}else
{
w=(w+1)%mod;
q[w]=e[i].to;
flag[e[i].to]=1;
}
}
}
flag[now]=0;
}
}
int main()
{
scanf("%d%d",&n,&m);
if ((n+m)&1)
{
printf("NO SOLUTION");
return 0;
}
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++)
{
ch=' ';
while (ch!='/' && ch!='\\' ) scanf("%c",&ch);
if (ch=='\\')
{
insert((i-1)*(m+1)+j+1,i*(m+1)+j,1);
insert((i-1)*(m+1)+j,i*(m+1)+j+1,0);
}
else if (ch=='/')
{
insert((i-1)*(m+1)+j,i*(m+1)+j+1,1);
insert((i-1)*(m+1)+j+1,i*(m+1)+j,0);
}
}
spfa();
printf("%d\n",dist[(n+1)*(m+1)]);
}
bzoj2346[Baltic 2011]Lamp的更多相关文章
- 【搜索 ex-BFS】bzoj2346: [Baltic 2011]Lamp
关于图中边权非零即一的宽度优先搜索 Description 译自 BalticOI 2011 Day1 T3「Switch the Lamp On」有一种正方形的电路元件,在它的两组相对顶点中,有一组 ...
- BZOJ2346:[Baltic 2011]Lamp(最短路)
Description 2255是一个傻X,他连自己家灯不亮了都不知道. 某天TZ大神路过他家,发现了这一情况, 于是TZ开始行侠仗义了. TZ发现是电路板的问题, 他打开了电路板,发现线路根本没有连 ...
- Bzoj 2346: [Baltic 2011]Lamp dijkstra,堆
2346: [Baltic 2011]Lamp Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 428 Solved: 179[Submit][Sta ...
- [Baltic 2011]Lamp BZOJ2346
分析: 建图最短路,比较裸. 我们可以考虑,如果是‘\’那么,左上连右下边权为0,左下连右上边权为1,反之亦然. 卡裸spfa,加点优化能过,我就直接改成的堆优化Dijkstra 附上代码: #inc ...
- 【bzoj2346】[Baltic 2011]Lamp 堆优化Dijkstra
题目描述 2255是一个傻X,他连自己家灯不亮了都不知道.某天TZ大神路过他家,发现了这一情况,于是TZ开始行侠仗义了.TZ发现是电路板的问题,他打开了电路板,发现线路根本没有连上!!于是他强大的脑力 ...
- bzoj2346 & loj2632 [Baltic 2011]Lamp 最短路
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=2346 https://loj.ac/problem/2632 题解 普及组难度的题都要想十几分 ...
- 【刷题】BZOJ 2346 [Baltic 2011]Lamp
Description 2255是一个傻X,他连自己家灯不亮了都不知道. 某天TZ大神路过他家,发现了这一情况, 于是TZ开始行侠仗义了. TZ发现是电路板的问题, 他打开了电路板,发现线路根本没有连 ...
- BZOJ 2346: [Baltic 2011]Lamp Dijkstra
不难发现如果一个边的方向改变,就一定不会改回来(这样肯定不是最短路). 所以就直接建双向边,边权为 $0$ 代表不改变,边权为 $1$ 代表改变,跑一个最短路即可. #include <bits ...
- BZOJ2348: [Baltic 2011]Plagiarism
2348: [Baltic 2011]Plagiarism Time Limit: 1 Sec Memory Limit: 256 MBSubmit: 304 Solved: 141[Submit ...
随机推荐
- 深入理解linux网络技术内幕读书笔记(三)--用户空间与内核的接口
Table of Contents 1 概论 1.1 procfs (/proc 文件系统) 1.1.1 编程接口 1.2 sysctl (/proc/sys目录) 1.2.1 编程接口 1.3 sy ...
- mysql-创建函数,存储过程以及视图
1.创建函数 mysql>delimiter // mysql>create function 函数名(参数1 参数1类型,...) returns 返回类型 >be ...
- css浮动+应用(瀑布流效果的实现)
首先是index.html文件: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"& ...
- UVA 714 Copying Books 最大值最小化问题 (贪心 + 二分)
Copying Books Before the invention of book-printing, it was very hard to make a copy of a book. A ...
- 内部类之.this&&.new
一..this 我们都知道this是指当前类中的对象本身,但是在内部类中需要指明外部类时,this不再起作用,那应该怎么做呢?下面,让我们看看: public class DotThis { void ...
- openwrt sdk compile
recently ,bought a router : tl-wr741n-v5 hd my aim : let the router dail in neetkeeper environment : ...
- 关于C#中的抽象类、抽象方法和虚方法的探究
2016年的第一篇文章,容我先喷喷新年的情怀,..........,好了,喷的差不多了. 在面向对象中,我们需要对类进行横向和纵向的认识,不同的类有不同特色的成员,同时在不同类的继承中,子类获得父类的 ...
- 使用SQL语句创建和删除约束
原文:http://blog.csdn.net/hamber_bao/article/details/6504905 约束的目的就是确保表中的数据的完整性. 常用的约束类型如下: 主键约束:(Prim ...
- document.documentElement和document.body区别
body是DOM对象里的body子节点,即body标签, documentElement 是整个节点树的根节点root, 详细介绍请看本文,感兴趣的朋友可以参考下 区别: body是DOM对象里的 ...
- Android --------- 利用SharedPreferences存取数据
//向SharedPreferences中存放数据 //1.定义SharedPreferences对象,通过getSharedPreferences方法得到 SharedPreferences sp ...