Description

2255是一个傻X,他连自己家灯不亮了都不知道。

某天TZ大神路过他家,发现了这一情况,

于是TZ开始行侠仗义了。

TZ发现是电路板的问题,

他打开了电路板,发现线路根本没有连上!!

于是他强大的脑力可以使某个格子上的线路从\变为/,

或者从/变为\。

2255不会电路(因为他什么都不会),但是他想知道TZ最少要用多少次脑力才能使他家的灯变亮。

如果无法变亮,输出“NO SOLUTION”。

n,m<=500

Input

Output

Sample Input

3 5

\/\

\///

/\\

Sample Output

1

Solution

可以先考虑费用流,然后发现其实就是最短路

要改变的话长度为 \(1\) ,不改变长度为 \(0\) ,跑最短路即可

  1. #include<bits/stdc++.h>
  2. #define ui unsigned int
  3. #define ll long long
  4. #define db double
  5. #define ld long double
  6. #define ull unsigned long long
  7. const int MAXN=251001+10,inf=0x3f3f3f3f;
  8. int n,m,e,beg[MAXN],s,t,d[MAXN],p[MAXN],nex[MAXN<<3],to[MAXN<<3],w[MAXN<<3];
  9. char str[510];
  10. std::deque<int> q;
  11. template<typename T> inline void read(T &x)
  12. {
  13. T data=0,w=1;
  14. char ch=0;
  15. while(ch!='-'&&(ch<'0'||ch>'9'))ch=getchar();
  16. if(ch=='-')w=-1,ch=getchar();
  17. while(ch>='0'&&ch<='9')data=((T)data<<3)+((T)data<<1)+(ch^'0'),ch=getchar();
  18. x=data*w;
  19. }
  20. template<typename T> inline void write(T x,char ch='\0')
  21. {
  22. if(x<0)putchar('-'),x=-x;
  23. if(x>9)write(x/10);
  24. putchar(x%10+'0');
  25. if(ch!='\0')putchar(ch);
  26. }
  27. template<typename T> inline void chkmin(T &x,T y){x=(y<x?y:x);}
  28. template<typename T> inline void chkmax(T &x,T y){x=(y>x?y:x);}
  29. template<typename T> inline T min(T x,T y){return x<y?x:y;}
  30. template<typename T> inline T max(T x,T y){return x>y?x:y;}
  31. inline int id(int x,int y)
  32. {
  33. return (x-1)*(m+1)+y;
  34. }
  35. inline void insert(int x,int y,int z)
  36. {
  37. to[++e]=y;
  38. nex[e]=beg[x];
  39. beg[x]=e;
  40. w[e]=z;
  41. }
  42. inline int bfs()
  43. {
  44. for(register int i=1;i<=t;++i)d[i]=inf;
  45. d[s]=0;
  46. p[s]=1;
  47. q.push_back(s);
  48. while(!q.empty())
  49. {
  50. int x=q.front();
  51. q.pop_front();
  52. p[x]=0;
  53. for(register int i=beg[x];i;i=nex[i])
  54. if(d[to[i]]>d[x]+w[i])
  55. {
  56. d[to[i]]=d[x]+w[i];
  57. if(!p[to[i]])
  58. {
  59. p[to[i]]=1;
  60. if(q.empty()||d[to[i]]<d[q.front()])q.push_front(to[i]);
  61. else q.push_back(to[i]);
  62. }
  63. }
  64. }
  65. if(d[t]==inf)return -1;
  66. else return d[t];
  67. }
  68. int main()
  69. {
  70. read(n);read(m);
  71. for(register int i=1;i<=n;++i)
  72. {
  73. scanf("%s",str+1);
  74. for(register int j=1;j<=m;++j)
  75. if(str[j]=='/')
  76. {
  77. insert(id(i+1,j),id(i,j+1),0);
  78. insert(id(i,j+1),id(i+1,j),0);
  79. insert(id(i,j),id(i+1,j+1),1);
  80. insert(id(i+1,j+1),id(i,j),1);
  81. }
  82. else
  83. {
  84. insert(id(i,j),id(i+1,j+1),0);
  85. insert(id(i+1,j+1),id(i,j),0);
  86. insert(id(i+1,j),id(i,j+1),1);
  87. insert(id(i,j+1),id(i+1,j),1);
  88. }
  89. }
  90. s=id(1,1);t=id(n+1,m+1);
  91. int ans=bfs();
  92. if(ans==-1)puts("NO SOLUTION");
  93. else write(ans,'\n');
  94. return 0;
  95. }

【刷题】BZOJ 2346 [Baltic 2011]Lamp的更多相关文章

  1. Bzoj 2346: [Baltic 2011]Lamp dijkstra,堆

    2346: [Baltic 2011]Lamp Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 428  Solved: 179[Submit][Sta ...

  2. BZOJ 2346: [Baltic 2011]Lamp Dijkstra

    不难发现如果一个边的方向改变,就一定不会改回来(这样肯定不是最短路). 所以就直接建双向边,边权为 $0$ 代表不改变,边权为 $1$ 代表改变,跑一个最短路即可. #include <bits ...

  3. 【搜索 ex-BFS】bzoj2346: [Baltic 2011]Lamp

    关于图中边权非零即一的宽度优先搜索 Description 译自 BalticOI 2011 Day1 T3「Switch the Lamp On」有一种正方形的电路元件,在它的两组相对顶点中,有一组 ...

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

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

  5. 【bzoj2346】[Baltic 2011]Lamp 堆优化Dijkstra

    题目描述 2255是一个傻X,他连自己家灯不亮了都不知道.某天TZ大神路过他家,发现了这一情况,于是TZ开始行侠仗义了.TZ发现是电路板的问题,他打开了电路板,发现线路根本没有连上!!于是他强大的脑力 ...

  6. bzoj2346[Baltic 2011]Lamp

    Description 2255是一个傻X,他连自己家灯不亮了都不知道. 某天TZ大神路过他家,发现了这一情况, 于是TZ开始行侠仗义了. TZ发现是电路板的问题, 他打开了电路板,发现线路根本没有连 ...

  7. [Baltic 2011]Lamp BZOJ2346

    分析: 建图最短路,比较裸. 我们可以考虑,如果是‘\’那么,左上连右下边权为0,左下连右上边权为1,反之亦然. 卡裸spfa,加点优化能过,我就直接改成的堆优化Dijkstra 附上代码: #inc ...

  8. BZOJ2346:[Baltic 2011]Lamp(最短路)

    Description 2255是一个傻X,他连自己家灯不亮了都不知道. 某天TZ大神路过他家,发现了这一情况, 于是TZ开始行侠仗义了. TZ发现是电路板的问题, 他打开了电路板,发现线路根本没有连 ...

  9. 【刷题】BZOJ 2407 探险

    Description 探险家小T好高兴!X国要举办一次溶洞探险比赛,获奖者将得到丰厚奖品哦!小T虽然对奖品不感兴趣,但是这个大振名声的机会当然不能错过! 比赛即将开始,工作人员说明了这次比赛的规则: ...

随机推荐

  1. 执行shell脚本时提示bad interpreter:No such file or directory的解决办法

    执行shell脚本时提示bad interpreter:No such file or directory的解决办法 故障现象:在终端直接cd /var正常,在shell脚本中执行则报错.原因是脚本是 ...

  2. Siki_Unity_3-6_UI框架 (基于UGUI)

    Unity 3-6 UI框架 (基于UGUI) 任务1&2&3&4:介绍 && 创建工程 UI框架: 管理场景中所有UI面板 控制面板之间的跳转 如果没有UI框 ...

  3. egret性能优化总结

    ## 来自官方的优化建议 详见:http://edn.egret.com/cn/article/index/id/287 (1) 少使用Alpha混合. (2) 显式停止计时器,让它们准备好进行垃圾回 ...

  4. OpenFastPath(2):原生态Linux Socket应用如何移植到OpenFastPath上?

    版本信息: ODP(Open Data Plane): 1.19.0.2 OFP(Open Fast Path): 3.0.0 1.存在的问题 OpenFastPath作为一个开源的用户态TCP/IP ...

  5. Netty源码分析第2章(NioEventLoop)---->第7节: 处理IO事件

    Netty源码分析第二章: NioEventLoop   第七节:处理IO事件 上一小节我们了解了执行select()操作的相关逻辑, 这一小节我们继续学习select()之后, 轮询到io事件的相关 ...

  6. Netty源码分析第5章(ByteBuf)---->第10节: SocketChannel读取数据过程

    Netty源码分析第五章: ByteBuf 第十节: SocketChannel读取数据过程 我们第三章分析过客户端接入的流程, 这一小节带大家剖析客户端发送数据, Server读取数据的流程: 首先 ...

  7. Docker 自定义网络

    1.创建自定义网络 docker network create -d bridge --subnet 172.25.0.0/16 network_name 2.redis docker 添加到网络 d ...

  8. nginx中location详解

    Location block 的基本语法形式是: location [=|~|~*|^~|@] pattern { ... } [=|~|~*|^~|@] 被称作 location modifier ...

  9. ORACLE中查询被锁定的表,以及如何解锁

    http://www.cnblogs.com/weiyi1314/p/6813325.html

  10. Buaaclubs的NABC与发布

    NEED: 本项目主要目的是实现一个社团学生公共平台,平台的宗旨是为学生提供信息,为社团提供服务,在社团和学生之间建立联系.经过调查,我们发现了用户的以下需求: 需求一:社团发布信息,同学获知信息 这 ...