洛谷 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
- 3 5
- \\/\\
- \\///
- /\\\\
- 1
说明
样例的输入对应于题目描述中的情况。
只需要按照下面的方式旋转标准件,就可以使得电源和发动机之间连通。
思路:跑最短路。
错因:数组开小了,边数太多spfa会TLE应该用dijstra
60分代码:
- #include<queue>
- #include<cstdio>
- #include<cstring>
- #include<iostream>
- #include<algorithm>
- #define MAXN 350010
- using namespace std;
- char s[];
- int t,r,c,tot;
- int vis[MAXN],dis[MAXN];
- int to[MAXN*],net[MAXN*],cap[MAXN*],head[MAXN*];
- void add(int u,int v,int w){
- to[++tot]=v;net[tot]=head[u];cap[tot]=w;head[u]=tot;
- to[++tot]=u;net[tot]=head[v];cap[tot]=w;head[v]=tot;
- }
- void spfa(int s){
- queue<int>que;
- memset(vis,,sizeof(vis));
- memset(dis,0x3f,sizeof(dis));
- que.push(s);
- dis[s]=;vis[s]=;
- while(!que.empty()){
- int now=que.front();
- que.pop();
- vis[now]=;
- for(int i=head[now];i;i=net[i])
- if(dis[to[i]]>dis[now]+cap[i]){
- dis[to[i]]=dis[now]+cap[i];
- if(!vis[to[i]]){
- vis[to[i]]=;
- que.push(to[i]);
- }
- }
- }
- }
- int main(){
- scanf("%d",&t);
- while(t--){
- tot=;
- memset(head,,sizeof(head));
- scanf("%d%d",&r,&c);
- for(int i=;i<=r;i++){
- scanf("%s",s);
- for(int j=;j<c;j++)
- if(s[j]=='/'){
- add((i-)*(c+)+j+,i*(c+)+j+,);
- add((i-)*(c+)+j+,i*(c+)+j+,);
- }
- else{
- add((i-)*(c+)+j+,i*(c+)+j+,);
- add((i-)*(c+)+j+,i*(c+)+j+,);
- }
- }
- spfa();
- if(dis[(r+)*(c+)]==0x3f3f3f3f) cout<<"NO SOLUTION"<<endl;
- else cout<<dis[(r+)*(c+)]<<endl;
- }
- }
AC代码:
- #include<queue>
- #include<cstdio>
- #include<cstring>
- #include<iostream>
- #include<algorithm>
- #define MAXN 1050010
- using namespace std;
- struct nond{
- int number,dis;
- bool operator < (nond b) const{
- return dis>b.dis;
- }
- };
- char s[];
- int t,r,c,tot;
- int dis[MAXN];
- int to[MAXN*],net[MAXN*],cap[MAXN*],head[MAXN*];
- void add(int u,int v,int w){
- to[++tot]=v;net[tot]=head[u];cap[tot]=w;head[u]=tot;
- to[++tot]=u;net[tot]=head[v];cap[tot]=w;head[v]=tot;
- }
- void dijkstra(int s){
- priority_queue<nond>que;
- memset(dis,0x3f,sizeof(dis));
- que.push((nond){s,});
- dis[s]=;
- while(!que.empty()){
- nond now=que.top();
- que.pop();
- if(dis[now.number]!=now.dis) continue;
- for(int i=head[now.number];i;i=net[i])
- if(dis[to[i]]>dis[now.number]+cap[i]){
- dis[to[i]]=dis[now.number]+cap[i];
- que.push((nond){to[i],dis[to[i]]});
- }
- }
- }
- int main(){
- scanf("%d",&t);
- while(t--){
- tot=;
- memset(head,,sizeof(head));
- scanf("%d%d",&r,&c);
- for(int i=;i<=r;i++){
- scanf("%s",s+);
- for(int j=;j<=c;j++)
- if(s[j]=='/'){
- add((i-)*(c+)+j+,i*(c+)+j,);
- add((i-)*(c+)+j,i*(c+)+j+,);
- }
- else{
- add((i-)*(c+)+j,i*(c+)+j+,);
- add((i-)*(c+)+j+,i*(c+)+j,);
- }
- }
- dijkstra();
- if(dis[(r+)*(c+)]==0x3f3f3f3f) cout<<"NO SOLUTION"<<endl;
- else cout<<dis[(r+)*(c+)]<<endl;
- }
- }
洛谷 P2243 电路维修的更多相关文章
- 洛谷P2243 电路维修 [最短路]
题目传送门 电路维修 题目背景 Elf 是来自Gliese 星球的少女,由于偶然的原因漂流到了地球上.在她无依无靠的时候,善良的运输队员Mark 和James 收留了她.Elf 很感谢Mark和Jam ...
- 洛谷P2243 电路维修
题目地址 转化为图论问题 对于每个交叉点(X,Y)抽象成节点.与它相邻的四个点中,可以直接连线的边权为0,否则边权为1. 用死了的SPFA解决图论问题. #include <cstring> ...
- 【Dijkstra堆优化】洛谷P2243电路维修
题目背景 Elf 是来自Gliese 星球的少女,由于偶然的原因漂流到了地球上.在她无依无靠的时候,善良的运输队员Mark 和James 收留了她.Elf 很感谢Mark和James,可是一直也没能给 ...
- 洛谷P2242 公路维修问题
To 洛谷.2242 公路维修问题 题目描述 由于长期没有得到维修,A国的高速公路上出现了N个坑.为了尽快填补好这N个坑,A国决定对M处地段采取交通管制.为了求解方便,假设A国的高速公路只有一条,而且 ...
- P2243 电路维修
P2243 电路维修 题目背景 Elf 是来自Gliese 星球的少女,由于偶然的原因漂流到了地球上.在她无依无靠的时候,善良的运输队员Mark 和James 收留了她.Elf 很感谢Mark和Jam ...
- 洛谷 P2242 公路维修问题
P2242 公路维修问题 题目描述 由于长期没有得到维修,A国的高速公路上出现了N个坑.为了尽快填补好这N个坑,A国决定对M处地段采取交通管制.为了求解方便,假设A国的高速公路只有一条,而且是笔直的. ...
- 洛谷P2242 公路维修问题(Road)
题目描述 在一个夜黑风高,下着暴风雨的夜晚,farmer John的牛棚的屋顶.门被吹飞了. 好在许多牛正在度假,所以牛棚没有住满. 牛棚一个紧挨着另一个被排成一行,牛就住在里面过夜. 有些牛棚里有牛 ...
- Luogu P2243 电路维修 双端队列BFS
当转移的代价是0和一个分明不同的权值时,可以用双端队列BFS去跑(你跑最短路也没问题..QWQ) 而对于这道题,边旋转代价是1,不旋转代价是0:可以直接建图最短路,也可以跑BFS 这个题建图很有意思: ...
- 洛谷 P2317 [HNOI2005]星际贸易 解题报告
P2317 [HNOI2005]星际贸易 题目描述 输入输出格式 输入格式: 输出格式: 如果可以找到这样的方案,那么输出文件output.txt中包含两个整数X和Y.X表示贸易额,Y表示净利润并且两 ...
随机推荐
- SQL注入原理以及怎样避免注入
SQL注入:究竟什么时候会用到SQL呢?回答是訪问数据库的时候.也就是说SQL注入-->直接威胁到了数据源,呵呵.数据库都收到了威胁,站点还能正常现实么? 所谓SQL注入,就是通过把SQL命令插 ...
- 从WAVE头文件里获取压缩方式
在解析WAV文件时.会从头文件里读取TAG值,表示当前文件的压缩格式,如该值为1,表示没有压缩,其他表示不同的压缩方式. 如当中为6时,表示压缩方式是alaw 列表例如以下: TAG值 音频描写叙述 ...
- java中文件路径读取
windows下 1)相对路径 public static final String TestDataExcelFilePath="src/omstestdata.xlsx"; 2 ...
- POJ - 3257 Cow Roller Coaster (背包)
题目大意:要用N种材料建一条长为L的路,如今给出每种材料的长度w.起始地点x.发费c和耐久度f 问:在预算为B的情况下,建好这条路的最大耐久度是多少 解题思路:背包问题 dp[i][j]表示起始地点为 ...
- h5-注册
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAWYAAAIpCAIAAAAeogVlAAAgAElEQVR4nOy9W1gb6Z3/OTd7s9d7t8 ...
- 0x18 总结与练习
这一章不太满意啊.. 还是有点痛苦,但就是做的挺慢啊... 1.就是例题 2.括号画家 感觉这种提高组类型的细节题都没什么信心啊,fail了几次才A #include<cstdio> #i ...
- php5.5安装笔记
这次没想到本来很简单的php编译,没想到遇到那么多问题.再此记录一下. 1.php5.5编译安装主要有一个难点,就是GD库的问题,因为php5.5的GD库必须是2.1以上的版本哦 原来都是用的gd2. ...
- Spark的数据存储(十九)
Spark本身是基于内存计算的架构,数据的存储也主要分为内存和磁盘两个路径.Spark本身则根据存储位置.是否可序列化和副本数目这几个要素将数据存储分为多种存储级别.此外还可选择使用Tachyon来管 ...
- DOM基础知识(概念、节点树、事件、Document)
1. DOM概念 全称为 Document Object Model,译为文档对象模型 D:文档 - DOM将HTML页面解析为一个文档 —> document对象 O:对象 - DOM将H ...
- 有关windows dpi适配(c#)
/// <summary>当前Dpi</summary> public static Int32 Dpi { get; set; } /// <summary>修正 ...