P2243 电路维修

题目背景

Elf 是来自Gliese 星球的少女,由于偶然的原因漂流到了地球上。在她无依无靠的时候,善良的运输队员Mark 和James 收留了她。Elf 很感谢Mark和James,可是一直也没能给他们帮上什么忙。

题目描述

有一天 Mark 和James 的飞行车没有办法启动了,经过检查发现原来是电路板的故障。飞行车的电路板设计很奇葩,如下图所示:


错误日志: 调完有点激动, 没判无解直接交了


Solution

可以证明, 一个电路不会被反转多于 \(1\) 次

所以有边连边, 权为 \(0\) , 无边连边权为 \(1\) ,代表需要翻转一次

听说卡 \(SPFA\) 于是交了个 \(SPFA(SLF)\) \(A\) 了

Code

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<queue>
  4. #include<cstring>
  5. #include<algorithm>
  6. #define LL long long
  7. #define REP(i, x, y) for(int i = (x);i <= (y);i++)
  8. using namespace std;
  9. int RD(){
  10. int out = 0,flag = 1;char c = getchar();
  11. while(c < '0' || c >'9'){if(c == '-')flag = -1;c = getchar();}
  12. while(c >= '0' && c <= '9'){out = out * 10 + c - '0';c = getchar();}
  13. return flag * out;
  14. }
  15. const int maxn = 500 * 500 * 4 + 19 ,INF = 1e9 + 19;
  16. int head[maxn],nume = 1;
  17. struct Node{
  18. int v,dis,nxt;
  19. }E[maxn << 3];
  20. void add(int u,int v,int dis){
  21. E[++nume].nxt = head[u];
  22. E[nume].v = v;
  23. E[nume].dis = dis;
  24. head[u] = nume;
  25. }
  26. int T, lenx, leny;
  27. void addEDG(int x, int y, int o){//o == 0 : \ //
  28. int id = (x - 1) * (leny + 1) + y;
  29. add(id, id + leny + 2, 0 ^ o);
  30. add(id + leny + 2, id, 0 ^ o);
  31. add(id + 1, id + leny + 1, 1 ^ o);
  32. add(id + leny + 1, id + 1, 1 ^ o);
  33. }
  34. int d[maxn];
  35. bool inq[maxn];
  36. void SPFA(int s){
  37. deque<int>Q;
  38. d[s] = 0;
  39. Q.push_front(s);
  40. inq[s] = 1;
  41. while(!Q.empty()){
  42. int u = Q.front();Q.pop_front();inq[u] = false;
  43. for(int i = head[u];i;i = E[i].nxt){
  44. int v = E[i].v, dis = E[i].dis;
  45. if(d[u] + dis < d[v]){
  46. d[v] = d[u] + dis;
  47. if(!inq[v]){
  48. if(Q.empty() || d[v] <= d[Q.front()])Q.push_front(v);
  49. else Q.push_back(v);
  50. inq[v] = 1;
  51. }
  52. }
  53. }
  54. }
  55. }
  56. char s[maxn];
  57. int main(){
  58. T = RD();
  59. while(T--){
  60. lenx = RD(), leny = RD();
  61. int t = (lenx - 1) * (leny + 1) + leny + 2 + leny;
  62. nume = 1, memset(head, 0, sizeof(head));
  63. REP(i, 1, t)d[i] = 1e9;
  64. REP(i, 1, lenx){
  65. cin>>s;
  66. REP(j, 1, leny){
  67. if(s[j - 1] == '/')addEDG(i, j, 1);
  68. else addEDG(i, j, 0);
  69. }
  70. }
  71. SPFA(1);
  72. if(d[t] == 1e9)puts("NO SOLUTION");
  73. else printf("%d\n", d[t]);
  74. }
  75. return 0;
  76. }

P2243 电路维修的更多相关文章

  1. 洛谷 P2243 电路维修

    P2243 电路维修 题目背景 Elf 是来自Gliese 星球的少女,由于偶然的原因漂流到了地球上.在她无依无靠的时候,善良的运输队员Mark 和James 收留了她.Elf 很感谢Mark和Jam ...

  2. 洛谷P2243 电路维修 [最短路]

    题目传送门 电路维修 题目背景 Elf 是来自Gliese 星球的少女,由于偶然的原因漂流到了地球上.在她无依无靠的时候,善良的运输队员Mark 和James 收留了她.Elf 很感谢Mark和Jam ...

  3. 洛谷P2243 电路维修

    题目地址 转化为图论问题 对于每个交叉点(X,Y)抽象成节点.与它相邻的四个点中,可以直接连线的边权为0,否则边权为1. 用死了的SPFA解决图论问题. #include <cstring> ...

  4. 【Dijkstra堆优化】洛谷P2243电路维修

    题目背景 Elf 是来自Gliese 星球的少女,由于偶然的原因漂流到了地球上.在她无依无靠的时候,善良的运输队员Mark 和James 收留了她.Elf 很感谢Mark和James,可是一直也没能给 ...

  5. Luogu P2243 电路维修 双端队列BFS

    当转移的代价是0和一个分明不同的权值时,可以用双端队列BFS去跑(你跑最短路也没问题..QWQ) 而对于这道题,边旋转代价是1,不旋转代价是0:可以直接建图最短路,也可以跑BFS 这个题建图很有意思: ...

  6. CH2601 电路维修(双端队列bfs)建图恶心

    CH2601 电路维修 双端队列bfs,其实就是因为只有0和1所以可以直接2维护队列单调性(和优先队列一个道理) 建图的过程需要仔细斟酌(想一想id为什么这么写) 还有,空间要开够(很玄学),我一开始 ...

  7. 「CH2601」 电路维修 解题报告

    CH2601 电路维修 描述 Ha'nyu是来自异世界的魔女,她在漫无目的地四处漂流的时候,遇到了善良的少女Rika,从而被收留在地球上.Rika的家里有一辆飞行车.有一天飞行车的电路板突然出现了故障 ...

  8. 2601 电路维修 (双端队列bfs\优先队列bfs(最短路))

    描述 Ha'nyu是来自异世界的魔女,她在漫无目的地四处漂流的时候,遇到了善良的少女Rika,从而被收留在地球上.Rika的家里有一辆飞行车.有一天飞行车的电路板突然出现了故障,导致无法启动. 电路板 ...

  9. CH 2601 - 电路维修 - [双端队列BFS]

    题目链接:传送门 描述 Ha'nyu是来自异世界的魔女,她在漫无目的地四处漂流的时候,遇到了善良的少女Rika,从而被收留在地球上.Rika的家里有一辆飞行车.有一天飞行车的电路板突然出现了故障,导致 ...

随机推荐

  1. Scrum Meeting 4 -2014.11.8

    开始了apec的放假,希望大家能处理好工作与休息的时间分配,不要玩疯了啊. 各任务都开始实现了自己的算法,需要部署的服务器我也进去看了看情况,希望最后能部署成功. 最近发现的一些关于上一届实现的问题, ...

  2. Daily Scrum5 11.7

    今日任务: 姓名 任务 时长 徐钧鸿 学习了java连接sqlserver的方法并且实现了连接池 2h 张艺 继续完成和用户管理有关的类的移植(Register.Success.Validate等) ...

  3. Thirteenth scrum meeting 2015/11/11

    发布bug整理集结: 手机用户体验优化优化: (1)主界面和课程界面的字体规格以及界面结构不同 (2)课程图片的大小格式不统一,造成美观下降 ( 3 )按钮的位置不美观 平板用户体验: (1)Tab键 ...

  4. Internet 校验和的数学性质

    Internet 校验和(Checksum)仅计算头部的正确性,这一点很重要,这意味着 IP 协议不检查 IPv4 packet 有效载荷部分的数据正确性.为了保证有效载荷部分的正常传输,其他协议必须 ...

  5. 【问底】王帅:深入PHP内核(一)——弱类型变量原理探究

    来源:CSDN    http://www.csdn.net/article/2014-09-15/2821685-exploring-of-the-php 作者:王帅 摘要:PHP作为一门简单而强大 ...

  6. List<Map> 进行求和

    public class Main { public static void main(String[] args) { List<Map> lists = new ArrayList&l ...

  7. echarts 地图 离线json包分享

    最近,项目中需要用到地图,由于项目的特殊性,只能使用内网获取数据. 然而,echarts官网上的离线地图包(http://echarts.baidu.com/download-map.html)早在一 ...

  8. 你好,OI

    高二了才开通真正意义上的博客...以前一直比较懒没写过什么,现在为了给自己留下一点回忆还是过来了. 上半年的那次失败还是历历在目啊...几个月来一直在我心中挥之不去.虽说也是自己的能力不足造成的,但是 ...

  9. Error:Artifact 'xx.war exploded' has invalid extension

    环境信息:  IDEA 13 ,  MAVEN, JBOSS 7. 配置信息: 常规配置. 出错信息: Error:Artifact 'xx.war exploded' has invalid ext ...

  10. maven 手动执行下载

    先把命令行切换到Maven项目的根目录,比如:/d/xxxwork/java/maven-test,然后执行命令: mvn clean compile