题目:

小Z最近喜欢上了图论,于是他研究了一下图的连通性问题。但是他遇到了一个难题。

给定一个n个点的有向图,求有多少点对(i,j)满足从i点出发能到达点j ?

小Z仅会简单的朴素算法,所以他想问问你怎么解决。

你能帮帮他吗?

输入/输出格式

第一行一个数字n,表示有n个点。

接下来n行,每行n个0/1,如果第i行第j个是1,表示从第i个点向第j个点有连边。

输出仅包含一个数,表示满足条件的点对数量。

样例输入/输出

Input:

3

0 1 0

0 0 1

1 0 0

Output:

9

样例解释

从任意一个点出发均可到达其它所有点(包括自己)

数据范围与约定

      对于50%的数据,满足n<=500

对于100%的数据,满足n<=2000

注意i和j可以相同

好吧,大家一看到这道题,心想:有向图判断连通,SB都会(蒟蒻瑟瑟发抖)。。

然后我们看到了数据范围。。

恩。。

好像O(n^3)不能过?

然后N(n^2logn)就能过了?

然后各种奇特算法就冒了出来。。

计算强联通分量。。。(tarjan+拓补?(by hzwer))

结果蒟蒻认为非常的难,就写了个暴力,拿了40分、

结果学长给出正解。

floyd....

floyd?不会T?

是的,不会T,因为我们拥有了一个新数据结构!

BITSET!!!!

科普一下。

首先用bitset要#include<bitset>

同时要定义的时候要这么写:bitset<位数> 名称([数组]可加可不加)

先来理解一下bitset到底是什么东东。

众所周知,1个bool值有2种可能 0或1

那么一个bitset就像是n个bool值用二进制叠了起来,如:001010

所以还是O(N)啊?

不对,因为一个二进制数为1bit

而一个int为32bit

所以复杂度为O(N^3)/32

神奇的过了。。

然后再来讲一讲具体的应用

首先bitset最常用的就是count()函数,他能找出bitset中1的数量(复杂度玄学)

本题中我们将floyd简化

原来3个循环,现在2个。

bitset<2005> b[2005]

for(int i=1;i<=n;i++)

for(int j=1;j<=n;j++)

if(b[j][i])b[j]|=b[i];

就是说如果j能走到i,那么i能走到的地方j一定能走到。

最后统计答案即可(b[i].count()的函数返回值即为i能到达的点的个数(包括i自己))

下面贴代码

#include<iostream>
#include<cstdio>
#include<bitset>
#define r register
using namespace std;
bitset<> b[];
int n;
int ans;
int main(){
freopen("graph.in","r",stdin);
freopen("graph.out","w",stdout);
scanf("%d",&n);
for(r int i=;i<=n;i++)
for(r int j=;j<=n;j++)
{
int x;
scanf("%d",&x);
b[i][j]=(x|(i==j));
}
for(r int i=;i<=n;i++)
for(r int j=;j<=n;j++)
if(b[j][i])b[j]|=b[i];
for(r int i=;i<=n;i++)
ans+=b[i].count();
printf("%d\n",ans);
fclose(stdin);
fclose(stdout);
}

小Z爱图论(NOIP信(sang)心(bin)赛)From FallDream的更多相关文章

  1. 小Z爱序列(NOIP信(sang)心(bin)赛)From FallDream(粗制单调队列&单调栈的算法解析)

    原题: 小Z最擅长解决序列问题啦,什么最长公共上升然后下降然后上升的子序列,小Z都是轻松解决的呢. 但是小Z不擅长出序列问题啊,所以它给了你一道签到题. 给定一个n个数的序列ai,你要求出满足下述条件 ...

  2. 小Z爱划水(NOIP信(sang)心(bin)赛)From FallDream

    题目: 小Z在机房.他和其它机房同学都面临一个艰难的抉择,那就是 要不要划水? 每个人都有自己的一个意见,有的人想做题,有的人想划水. 当然,每个人只能选择一个事情做.如果一个人做的事情和他想做的不同 ...

  3. 【20170920校内模拟赛】小Z爱学习

    所有题目开启-O2优化,开大栈空间,评测机效率为4亿左右. T1 小 Z 学数学(math) Description ​ 要说小 Z 最不擅长的学科,那一定就是数学了.这不,他最近正在学习加法运算.老 ...

  4. 【0521模拟赛】小Z爱数学

    题目描述 小Z想求F(n,k),F(n,k)表示n的所有因数pi中,满足n/pi <= k 的和. 小Z发现还是很水,所以他决定加大难度. 求 小Z还准备了很多个询问.现在你来解决一下吧. 输入 ...

  5. 【0521模拟赛】小Z爱划水

    题目描述 小Z和其它机房同学都面临一个艰难的抉择,那就是 要不要划水? 每个人都有自己的一个意见,有的人想做题,有的人想划水. 当然,每个人只能选择一个事情做.如果一个人做的事情和他想做的不同,那么他 ...

  6. 2017-10-5模拟赛T2 小Z爱排序(sorting.*)

    Description Solution 比赛时找到了规律,但是没有证出来……(当然最后还是AC了……) 显然没有被操作的数在排好序的序列中一定是连续的一段. 所以,没有被操作的数一定从左到右连续地递 ...

  7. 【20170521校内模拟赛】热爱生活的小Z

    学长FallDream所出的模拟赛,个人感觉题目难度还是比较适中的,难度在提高+左右,可能比较接近弱省省选,总体来讲试题考查范围较广,个人认为还是很不错的. 所有试题如无特殊声明,开启-O2优化,时限 ...

  8. 【BZOJ2038】【莫队】小z的袜子

    Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命……具体来说,小Z把这N只袜 ...

  9. BZOJ 2038: [2009国家集训队]小Z的袜子(hose) [莫队算法]【学习笔记】

    2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 7687  Solved: 3516[Subm ...

随机推荐

  1. Flask错误收集 【转】

    感谢大佬 ---> 原文链接 一.pydev debugger: process XXXXX is connecting 这个错误网上找了很多资料都无法解决,尝试过多种方法后,对我来说,下面这个 ...

  2. perl语言入门总结-第4章-子程序

    子程序定义和返回值 sub sum{ print "调用了子程序\n"; $a + $b; #后一行为返回值 } ; ; $s =∑ #34 调用子程序 子程序中的参数,参数固定( ...

  3. laravel5.5事件广播系统

    目录 1. 定义广播事件 1.1 广播名称 1.2 广播数据 1.3 广播队列 1.4 广播条件 2. 频道授权 2.1 定义授权路由 2.2 定义授权回调 3. 对事件进行广播 3.1 可以使用ev ...

  4. Managing WMI security

    TechNet Library TechNet Archive Windows Server 2003 Product Help Windows Server 2003 Product Help Ad ...

  5. [转] PHP在不同页面之间传值的三种常见方式

    转自: http://my.oschina.net/jiec/blog/196153 一. POST传值 post传值是用于html的<form>表单跳转的方法,很方便使用.例如: < ...

  6. java编程-无锁初始化

    private final Node<K,V>[] initTable() { Node<K,V>[] tab; int sc; while ((tab = table) == ...

  7. python学习笔记四:lambda表达式和switch

    一.定义 lambda arg1,arg2... : returnValue 二.示例 #!/usr/bin/python def f(x,y): return x*y print f(2,3) g ...

  8. 【Adaptive Boosting】林轩田机器学习技法

    首先用一个形象的例子来说明AdaBoost的过程: 1. 每次产生一个弱的分类器,把本轮错的样本增加权重丢入下一轮 2. 下一轮对上一轮分错的样本再加重学习,获得另一个弱分类器 经过T轮之后,学得了T ...

  9. jQuery easyuI datagrid 多行编辑

    在easyUI 动态绑定部分数据后,需要有部分列可以修改,研究了一天终于搞定.这是小弟的做法,望各位有好招的大侠指点. 1.添加jQuery 和jQuery easyuI的引用. 2.添加id为tt的 ...

  10. 珍藏版 Python 开发工程师面试试题

    珍藏版 Python 开发工程师面试试题 说明:不拿到几家公司的offer,那就是卑鄙的浪费 一.Python_基础语法 1.可变与不可变类型: 2.浅拷贝与深拷贝的实现方式.区别:deepcopy如 ...