洛谷 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表示净利润并且两 ...
随机推荐
- BA-siemens-desigo_cc安装
1.首先安装NT3.5和NT4.0软件 2.按照以下网址的教程配置好IIS和WEBDAV环境:http://www.cnblogs.com/xiongzai/p/4126493.html 文章写的真不 ...
- BA-风阀水阀执行器接线图
220水阀执行器接线图 24V风阀执行器接线图
- HDU 4228
很明显可以转化为反素数的题目.由于有n种不同的方式,所以,数的约数可以为2*n或者2*n-1 #include <iostream> #include <cstdio> #in ...
- hdu 1166 敌兵布阵——(区间和)树状数组/线段树
pid=1166">here:http://acm.hdu.edu.cn/showproblem.php?pid=1166 Input 第一行一个整数T.表示有T组数据. 每组数据第一 ...
- SpringMVC 理论与有用技术(二)文件上传
文件上传相信大家都做过,差点儿全部的项目都有上传文件的功能,尤其是BS架构的项目中经常被列为常规功能来开发.不管是在开发.NET 项目还是java项目我们会用到非常多的框架,这个功能也被集成到了框架之 ...
- 院校-德国:亚琛工业大学(RWTH)
ylbtech-院校-德国:亚琛工业大学(RWTH) 1.返回顶部 1. 亚琛工业大学(RWTH)成立于1870年,是德国著名理工类大学之一,也是世界顶尖理工类大学之一 ,长久以来被誉为“欧洲的麻省理 ...
- crawler4j多线程爬虫统计分析数据
该事例演示了如何在多线程中统计和分析数据: 首先建一个状态实体类CrawlStat: package com.demo.collectingData; /** * 爬虫状态实体类 统计爬虫信息 * @ ...
- 关于SqlBulkCopy的测试
最近要做.net关于sql大量插入,找到了sqlbulkcopy(自己google下,应该很多说明了)这个好东西,于是测试下性能,用了三个方法对比: 1)直接用ado.net,for循环N次进行单条插 ...
- px 与 pt
px:pixel,像素,屏幕上显示的最小单位,用于网页设计,直观方便: pt:point,是一个标准的长度单位,1pt=1/72英寸,用于印刷业,非常简单易用: em:即%,在CSS中,1em=100 ...
- Activiti Modeler 5.22.0整合到Spring项目
转载 https://blog.csdn.net/u010411264/article/details/71480354