P2243 电路维修

题目背景

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

题目描述

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

输入输出格式

输入格式:

输入文件包含多组测试数据。第一行包含一个整数T 表示测试数据的数目。

对于每组测试数据,第一行包含正整数 R 和C,表示电路板的行数和列数。

之后 R 行,每行C 个字符,字符是"/"和"\"中的一个,表示标准件的方向。

对于40% 的数据,R,C≤5。

对于 100% 的数据,R,C≤500,T≤5。

输出格式:

对于每组测试数据,在单独的一行输出一个正整数,表示所需的缩小旋转次数。

如果无论怎样都不能使得电源和发动机之间连通,输出 NO SOLUTION。

输入输出样例

输入样例#1:

  1. 1
  2. 3 5
  3. \\/\\
  4. \\///
  5. /\\\\
输出样例#1:

  1. 1

说明

样例的输入对应于题目描述中的情况。

只需要按照下面的方式旋转标准件,就可以使得电源和发动机之间连通。

思路:跑最短路。

错因:数组开小了,边数太多spfa会TLE应该用dijstra

60分代码:

  1. #include<queue>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<iostream>
  5. #include<algorithm>
  6. #define MAXN 350010
  7. using namespace std;
  8. char s[];
  9. int t,r,c,tot;
  10. int vis[MAXN],dis[MAXN];
  11. int to[MAXN*],net[MAXN*],cap[MAXN*],head[MAXN*];
  12. void add(int u,int v,int w){
  13. to[++tot]=v;net[tot]=head[u];cap[tot]=w;head[u]=tot;
  14. to[++tot]=u;net[tot]=head[v];cap[tot]=w;head[v]=tot;
  15. }
  16. void spfa(int s){
  17. queue<int>que;
  18. memset(vis,,sizeof(vis));
  19. memset(dis,0x3f,sizeof(dis));
  20. que.push(s);
  21. dis[s]=;vis[s]=;
  22. while(!que.empty()){
  23. int now=que.front();
  24. que.pop();
  25. vis[now]=;
  26. for(int i=head[now];i;i=net[i])
  27. if(dis[to[i]]>dis[now]+cap[i]){
  28. dis[to[i]]=dis[now]+cap[i];
  29. if(!vis[to[i]]){
  30. vis[to[i]]=;
  31. que.push(to[i]);
  32. }
  33. }
  34. }
  35. }
  36. int main(){
  37. scanf("%d",&t);
  38. while(t--){
  39. tot=;
  40. memset(head,,sizeof(head));
  41. scanf("%d%d",&r,&c);
  42. for(int i=;i<=r;i++){
  43. scanf("%s",s);
  44. for(int j=;j<c;j++)
  45. if(s[j]=='/'){
  46. add((i-)*(c+)+j+,i*(c+)+j+,);
  47. add((i-)*(c+)+j+,i*(c+)+j+,);
  48. }
  49. else{
  50. add((i-)*(c+)+j+,i*(c+)+j+,);
  51. add((i-)*(c+)+j+,i*(c+)+j+,);
  52. }
  53. }
  54. spfa();
  55. if(dis[(r+)*(c+)]==0x3f3f3f3f) cout<<"NO SOLUTION"<<endl;
  56. else cout<<dis[(r+)*(c+)]<<endl;
  57. }
  58. }

AC代码:

  1. #include<queue>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<iostream>
  5. #include<algorithm>
  6. #define MAXN 1050010
  7. using namespace std;
  8. struct nond{
  9. int number,dis;
  10. bool operator < (nond b) const{
  11. return dis>b.dis;
  12. }
  13. };
  14. char s[];
  15. int t,r,c,tot;
  16. int dis[MAXN];
  17. int to[MAXN*],net[MAXN*],cap[MAXN*],head[MAXN*];
  18. void add(int u,int v,int w){
  19. to[++tot]=v;net[tot]=head[u];cap[tot]=w;head[u]=tot;
  20. to[++tot]=u;net[tot]=head[v];cap[tot]=w;head[v]=tot;
  21. }
  22. void dijkstra(int s){
  23. priority_queue<nond>que;
  24. memset(dis,0x3f,sizeof(dis));
  25. que.push((nond){s,});
  26. dis[s]=;
  27. while(!que.empty()){
  28. nond now=que.top();
  29. que.pop();
  30. if(dis[now.number]!=now.dis) continue;
  31. for(int i=head[now.number];i;i=net[i])
  32. if(dis[to[i]]>dis[now.number]+cap[i]){
  33. dis[to[i]]=dis[now.number]+cap[i];
  34. que.push((nond){to[i],dis[to[i]]});
  35. }
  36. }
  37. }
  38. int main(){
  39. scanf("%d",&t);
  40. while(t--){
  41. tot=;
  42. memset(head,,sizeof(head));
  43. scanf("%d%d",&r,&c);
  44. for(int i=;i<=r;i++){
  45. scanf("%s",s+);
  46. for(int j=;j<=c;j++)
  47. if(s[j]=='/'){
  48. add((i-)*(c+)+j+,i*(c+)+j,);
  49. add((i-)*(c+)+j,i*(c+)+j+,);
  50. }
  51. else{
  52. add((i-)*(c+)+j,i*(c+)+j+,);
  53. add((i-)*(c+)+j+,i*(c+)+j,);
  54. }
  55. }
  56. dijkstra();
  57. if(dis[(r+)*(c+)]==0x3f3f3f3f) cout<<"NO SOLUTION"<<endl;
  58. else cout<<dis[(r+)*(c+)]<<endl;
  59. }
  60. }

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

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

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

  2. 洛谷P2243 电路维修

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

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

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

  4. 洛谷P2242 公路维修问题

    To 洛谷.2242 公路维修问题 题目描述 由于长期没有得到维修,A国的高速公路上出现了N个坑.为了尽快填补好这N个坑,A国决定对M处地段采取交通管制.为了求解方便,假设A国的高速公路只有一条,而且 ...

  5. P2243 电路维修

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

  6. 洛谷 P2242 公路维修问题

    P2242 公路维修问题 题目描述 由于长期没有得到维修,A国的高速公路上出现了N个坑.为了尽快填补好这N个坑,A国决定对M处地段采取交通管制.为了求解方便,假设A国的高速公路只有一条,而且是笔直的. ...

  7. 洛谷P2242 公路维修问题(Road)

    题目描述 在一个夜黑风高,下着暴风雨的夜晚,farmer John的牛棚的屋顶.门被吹飞了. 好在许多牛正在度假,所以牛棚没有住满. 牛棚一个紧挨着另一个被排成一行,牛就住在里面过夜. 有些牛棚里有牛 ...

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

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

  9. 洛谷 P2317 [HNOI2005]星际贸易 解题报告

    P2317 [HNOI2005]星际贸易 题目描述 输入输出格式 输入格式: 输出格式: 如果可以找到这样的方案,那么输出文件output.txt中包含两个整数X和Y.X表示贸易额,Y表示净利润并且两 ...

随机推荐

  1. SQL注入原理以及怎样避免注入

    SQL注入:究竟什么时候会用到SQL呢?回答是訪问数据库的时候.也就是说SQL注入-->直接威胁到了数据源,呵呵.数据库都收到了威胁,站点还能正常现实么? 所谓SQL注入,就是通过把SQL命令插 ...

  2. 从WAVE头文件里获取压缩方式

    在解析WAV文件时.会从头文件里读取TAG值,表示当前文件的压缩格式,如该值为1,表示没有压缩,其他表示不同的压缩方式. 如当中为6时,表示压缩方式是alaw 列表例如以下: TAG值 音频描写叙述 ...

  3. java中文件路径读取

    windows下 1)相对路径 public static final String TestDataExcelFilePath="src/omstestdata.xlsx"; 2 ...

  4. POJ - 3257 Cow Roller Coaster (背包)

    题目大意:要用N种材料建一条长为L的路,如今给出每种材料的长度w.起始地点x.发费c和耐久度f 问:在预算为B的情况下,建好这条路的最大耐久度是多少 解题思路:背包问题 dp[i][j]表示起始地点为 ...

  5. h5-注册

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAWYAAAIpCAIAAAAeogVlAAAgAElEQVR4nOy9W1gb6Z3/OTd7s9d7t8 ...

  6. 0x18 总结与练习

    这一章不太满意啊.. 还是有点痛苦,但就是做的挺慢啊... 1.就是例题 2.括号画家 感觉这种提高组类型的细节题都没什么信心啊,fail了几次才A #include<cstdio> #i ...

  7. php5.5安装笔记

    这次没想到本来很简单的php编译,没想到遇到那么多问题.再此记录一下. 1.php5.5编译安装主要有一个难点,就是GD库的问题,因为php5.5的GD库必须是2.1以上的版本哦 原来都是用的gd2. ...

  8. Spark的数据存储(十九)

    Spark本身是基于内存计算的架构,数据的存储也主要分为内存和磁盘两个路径.Spark本身则根据存储位置.是否可序列化和副本数目这几个要素将数据存储分为多种存储级别.此外还可选择使用Tachyon来管 ...

  9. DOM基础知识(概念、节点树、事件、Document)

    1.   DOM概念 全称为 Document Object Model,译为文档对象模型 D:文档 - DOM将HTML页面解析为一个文档 —> document对象 O:对象 - DOM将H ...

  10. 有关windows dpi适配(c#)

    /// <summary>当前Dpi</summary> public static Int32 Dpi { get; set; } /// <summary>修正 ...