MC挖矿世界

题目连接:

http://acm.uestc.edu.cn/#/problem/show/1287

Description

银牌爷和柱神开始玩MC啦,但是怪物实在是太多了,于是银牌爷决定去挖点钻石提升装备。

来到矿脉的银牌爷发现矿脉错综复杂。

矿脉是由一些矿洞和一些通道组成的,通道连着不同的矿洞。

矿洞的编号从11到nn

聪明的银牌爷定义了矿脉的复杂度为下面的式子:

∑ni=1∑nj=1δ(i,j)2∑i=1n∑j=1nδ(i,j)2

其中δ(i,j)δ(i,j)表示矿洞ii到矿洞jj的最短路

如果最短路不存在,则为nn

现在给出一个矿脉,银牌爷想知道这个矿脉的复杂度是多少?

Input

输入一个整数nn,1<=n<=20001<=n<=2000,表示总共nn个矿洞,接下来nn行nn列,第ii行jj列的值aij=1aij=1或者aij=0aij=0,如果aij=1aij=1,表示从矿洞ii到矿洞jj有一条长为11的边,如果aij=0aij=0,则表示从ii到jj没有直接的边

Output

输出一个整数,表示矿脉的复杂度

Sample Input

3

010

001

100

Sample Output

15

Hint

题意

题解:

最无脑的就是flyod,但是这个显然不会让你过啦

然后我们想直接从每一个点开始bfs就好了,但是还是会tle,为什么呢?

因为你访问了很多次没有意义的地方,因为有些点你曾经访问过,但是在你遍历边集的时候,你还去访问他,这个行为就会很多余。

所以我们用set来优化一下。

这个均摊下来,复杂度大概是n^2*logn的

最蛋疼的情况是你每次最多更新sqrtn个点,你需要更新sqrtn次,每次遍历和更新的复杂度都是logn,大概是这样……

对了:it指向set的某个数,如果set这个数被erase,it的指针会变……

代码

#include<bits/stdc++.h>
using namespace std;
const int maxn = 2005;
set<int> S;
string s[maxn];
long long ans = 0;
int n,d[maxn];
queue<int>Q;
void solve(int x)
{
S.clear();while(!Q.empty())Q.pop();
for(int i=0;i<n;i++)if(i!=x)S.insert(i);
for(int i=0;i<n;i++)d[i]=n;
d[x]=0,Q.push(x);
while(!Q.empty())
{
int u = Q.front();Q.pop();
set<int>::iterator it=S.begin();
while(S.size()&&it!=S.end())
{
int v=*it;
if(s[u][v]=='1')
{
d[v]=d[u]+1;
it++;
S.erase(v);
Q.push(v);
}
else it++;
}
}
for(int i=0;i<n;i++)
ans+=d[i]*d[i];
} int main()
{
scanf("%d",&n);
for(int i=0;i<n;i++)cin>>s[i];
for(int i=0;i<n;i++)solve(i);
cout<<ans<<endl;
}

HDU 1287 MC挖矿世界 set bfs的更多相关文章

  1. CDOJ 1287 MC挖矿世界(Spfa+set优化)

    题目大意:原题链接 解题思路:此题要求多点最短距离,但是直接套用floyd会超时. 然后我们想直接从每一个点开始bfs就好了,但是还是会TLE,为什么呢? 因为你访问了很多次没有意义的地方,因为有些点 ...

  2. HDU.2612 Find a way (BFS)

    HDU.2612 Find a way (BFS) 题意分析 圣诞节要到了,坤神和瑞瑞这对基佬想一起去召唤师大峡谷开开车.百度地图一下,发现周围的召唤师大峡谷还不少,这对基佬纠结着,该去哪一个...坤 ...

  3. HDU 2717 Catch That Cow (bfs)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2717 Catch That Cow Time Limit: 5000/2000 MS (Java/Ot ...

  4. HDU 1044 Collect More Jewels(BFS+DFS)

    Collect More Jewels Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Othe ...

  5. HDU 2181 哈密顿绕行世界问题(经典DFS+回溯)

    哈密顿绕行世界问题 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  6. HDU 5876:Sparse Graph(BFS)

    http://acm.hdu.edu.cn/showproblem.php?pid=5876 Sparse Graph Problem Description   In graph theory, t ...

  7. HDU 1728:逃离迷宫(BFS)

    http://acm.hdu.edu.cn/showproblem.php?pid=1728 逃离迷宫 Problem Description   给定一个m × n (m行, n列)的迷宫,迷宫中有 ...

  8. HDU 1885 Key Task(三维BFS)

    题目链接 题意 : 出口不止一个,一共有四种颜色不同的门由大写字母表示,而钥匙则是对应的小写字母,当你走到门前边的位置时,如果你已经走过相应的钥匙的位置这个门就可以走,只要获得一把钥匙就可以开所有同颜 ...

  9. hdu 1043 pku poj 1077 Eight (BFS + 康拓展开)

    http://acm.hdu.edu.cn/showproblem.php?pid=1043 http://poj.org/problem?id=1077 Eight Time Limit: 1000 ...

随机推荐

  1. 人脸识别如何做到one-shot learning?(转)

    来源:http://blog.csdn.net/ice_actor/article/details/78603042 1.什么是人脸识别   这部分演示了百度总部大楼的人脸识别系统,员工刷脸进出办公区 ...

  2. Web安全的三个攻防姿势

    原文地址:https://segmentfault.com/a/1190000011601837 作者: zwwill_木羽 关于Web安全的问题,是一个老生常谈的问题,作为离用户最近的一层,我们大前 ...

  3. oracle数据库只查询前n条

    select * from  (select * from   tablename order by createdate desc)  aaa -- 按创建时间倒排序 where rownum &l ...

  4. 移动端测试===adb shell top命令解释

    adb shell top top命令提供了实时的对系统处理器的状态监视.它将显示系统中CPU最“敏感”的任务列表.该命令可以按CPU使用.内存使用和执行时间对任务进行排序. top 用法 >a ...

  5. URAL题解三

    URAL题解三 URAL 1045 题目描述:有\(n\)个机场,\(n-1\)条航线,任意两个机场有且只有一种方案联通.现有两个恐怖分子从\(m\)号机场出发,第一个人在机场安装炸弹,乘坐飞机,引爆 ...

  6. 批量删除.svn文件夹和.svn文件

    新建可运行文件 Windows环境 将下面的代码保存为 kill-svn.bat文件,放到要删除.svn文件的目录下,双击运行即可 @echo on @rem 删除SVN版本控制目录 @rem for ...

  7. 大型网站的 HTTPS 实践(二)——HTTPS 对性能的影响(转)

    原文链接:http://op.baidu.com/2015/04/https-s01a02/ 1 前言 HTTPS 在保护用户隐私,防止流量劫持方面发挥着非常关键的作用,但与此同时,HTTPS 也会降 ...

  8. [ python ] 集合的使用

    集合的使用 可变数据类型,他里面的元素必须是不可变的数据类型,无序,不重复. 集合的增删查 集合是没有改这种说法的: (1)集合的元素无序的: (2)集合的元素为不可变类型  增加 add    为集 ...

  9. 安全控制 iptables

    转自:http://www.opsers.org/linux-home/videos/chapter-netfilter-iptables-raiders.html 内容简介防火墙的概述iptable ...

  10. jenkins+docker持续集成实验

    在互联网时代,对于每一家公司,软件开发和发布的重要性不言而喻,目前已经形成一套标准的流程,最重要的组成部分就是持续集成(CI)及持续部署.交付(CD).本文基于Jenkins+Docker+Git实现 ...