Borg Maze POJ - 3026 (BFS + 最小生成树)
题意:
求把S和所有的A连贯起来所用的线的最短长度。。。
这道题。。不看discuss我能wa一辈子。。。
输入有坑。。。
然后,,,也没什么了。。。还有注意 一次bfs是可以求当前点到所有点最短距离的。。。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <algorithm>
#include <cmath>
#define mem(a, b) memset(a, b, sizeof(a))
using namespace std;
const int maxn = , INF = 0x7fffffff;
int f[maxn], d[][];
int cnt, n, m;
int dis[][] = {{,},{-,},{,},{,-}};
char str[][], temp[maxn];
struct node
{
int u, v, w;
}Node[maxn]; struct edge
{
int x, y;
}Edge[maxn]; void add(int u, int v, int w)
{
Node[cnt].u = u;
Node[cnt].v = v;
Node[cnt++].w = w;
} void init()
{
for(int i=; i<maxn; i++) f[i] = i;
cnt = ;
} int cmp(node a, node b)
{
return a.w < b.w;
} int find(int x)
{
// return f[x]==x?x:(f[x] = find(f[x]));
if(f[x] == x) return x;
int r = f[x];
while(r != f[r]) r = f[r];
int i = x, j;
while(i!=r)
{
j = f[i];
f[i] = r;
i = j;
}
return r;
} void bfs(edge s)
{
queue<edge> Q;
mem(d, );
Q.push(s);
d[s.x][s.y] = ;
while(!Q.empty())
{
s = Q.front(); Q.pop();
for(int i=; i<; i++)
{
edge t;
t.x = s.x + dis[i][];
t.y = s.y + dis[i][];
if(t.x < || t.x >= n || t.y < || t.y >= m || d[t.x][t.y] || str[t.x][t.y] == '#') continue;
d[t.x][t.y] = d[s.x][s.y] + ;
Q.push(t);
}
}
} int main()
{
int T;
scanf("%d",&T);
while(T--)
{
init();
int ans = ;
scanf("%d%d",&m,&n);
gets(temp);
// getchar();
for(int i=; i<n; i++)
{
gets(str[i]);
for(int j=; j<m; j++)
{
if(str[i][j] == 'A' || str[i][j] == 'S')
Edge[++ans].x = i, Edge[ans].y = j;
}
}
for(int i=; i<=ans; i++)
{
bfs(Edge[i]);
for(int j=i+; j<=ans; j++)
add(i, j, d[Edge[j].x][Edge[j].y] - ); }
sort(Node, Node+cnt, cmp);
int sum = ;
for(int i=; i<cnt; i++)
{
int r = find(Node[i].u);
int l = find(Node[i].v);
if(r == l) continue;
f[r] = l;
sum += Node[i].w;
} printf("%d\n",sum); } return ;
}
Borg Maze POJ - 3026 (BFS + 最小生成树)的更多相关文章
- Borg Maze - poj 3026(BFS + Kruskal 算法)
Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9821 Accepted: 3283 Description The B ...
- poj 3026(BFS+最小生成树)
Borg Maze Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 12032 Accepted: 3932 Descri ...
- POJ 3026 Borg Maze 广搜(BFS)+最小生成树
题意:从S出发,去抓每一个A,求总路径最短长度.在S点和A点人可以分身成2人,不过一次只能让一个人走. 思路是先利用BFS求出各点之间的距离,建成图,再套用最小生成树模板. 一次性A了.不过觉得在判断 ...
- (最小生成树) Borg Maze -- POJ -- 3026
链接: http://poj.org/problem?id=3026 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82831#probl ...
- J - Borg Maze - poj 3026(BFS+prim)
在一个迷宫里面需要把一些字母.也就是 ‘A’ 和 ‘B’连接起来,求出来最短的连接方式需要多长,也就是最小生成树,地图需要预处理一下,用BFS先求出来两点间的最短距离, *************** ...
- Borg Maze poj 3026
Description The Borg is an immensely powerful race of enhanced humanoids from the delta quadrant of ...
- poj 3026 bfs+prim Borg Maze
Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9718 Accepted: 3263 Description The B ...
- POJ 3026 Borg Maze(Prim+bfs求各点间距离)
题目链接:http://poj.org/problem?id=3026 题目大意:在一个y行 x列的迷宫中,有可行走的通路空格’ ‘,不可行走的墙’#’,还有两种英文字母A和S,现在从S出发,要求用 ...
- POJ 3026 Borg Maze(Prim+BFS建邻接矩阵)
( ̄▽ ̄)" #include<iostream> #include<cstdio> #include<cstring> #include<algo ...
随机推荐
- CF613D Kingdom and its Cities 虚树
传送门 $\sum k \leq 100000$虚树套路题 设$f_{i,0/1}$表示处理完$i$以及其所在子树的问题,且处理完后$i$所在子树内是否存在$1$个关键点满足它到$i$的路径上不存在任 ...
- UOJ347 WC2018 通道 边分治、虚树
传送门 毒瘤数据结构题qwq 设三棵树分别为$T1,T2,T3$ 先将$T1$边分治,具体步骤如下: ①多叉树->二叉树,具体操作是对于每一个父亲,建立与儿子个数相同的虚点,将父亲与这些虚点穿成 ...
- LOJ500 ZQC的拼图 二分答案、DP
传送门 题意:给出$N$个直角三角形拼图和$M \times M$的网格,第$i$个直角三角形水平直角边边长为$\frac{1}{a_i}$,垂直直角边边长为$\frac{1}{b_i},$规定直角三 ...
- C#的抽象类别
抽象类,有3个特点: 第1个,不能被实例化. 第2个,类中的抽象方法在继承的子类中必须重写. 第3个,类一旦有抽象方法出现,那这个类必须定义为抽象类. 现实开发中,发现有共同的代码,可以把这些共同的代 ...
- Python爬虫利器二之Beautiful Soup的用法
上一节我们介绍了正则表达式,它的内容其实还是蛮多的,如果一个正则匹配稍有差池,那可能程序就处在永久的循环之中,而且有的小伙伴们也对写正则表达式的写法用得不熟练,没关系,我们还有一个更强大的工具,叫Be ...
- 案例学Python--案例四:Django实现一个网站的雏形(1)
第一次用python的Web框架,也是第一次听说Django,参考菜鸡教程和一些博客,倒腾了半天,算是有一个雏形.数据基于昨天爬的豆瓣电影信息,详见案例三. Python版本:3.7.1 Django ...
- 001_IntelliJ IDEA详细安装步骤
安装IntelliJ IDEA 一.安装JDK 1 下载最新的jdk,这里下的是jdk-8u66 2 将jdk安装到默认的路径C:\Program Files\Java目录下 二.安装IntelliJ ...
- 《Linux内核分析》实践2
<Linux及安全>实践2 一.Linux基本内核模块 1.1什么是内核模块 linux模块是一些可以作为独立程序来编译的函数和数据类型的集合.之所以提供模块机制,是因为Linux本身是一 ...
- div+css实现圆形div以及带箭头提示框效果
.img{ width:90px; height:90px; border-radius:45px; margin:0 40%; border:solid rgb(100,100,100) 1px;& ...
- junit-test
一.题目简介: 用单元测试junit4测试calculator类的加减乘除四种方法,来初步学习junit4的学习方法. 二.源码的github链接 :https://github.com/weare ...