题目:

小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. Android 数据库中的数据给到ListView

    前言:因为之前学的都是用一个自己定义的类,完成将某一个bean中的数据直接获取,而实际中通常是通过数据库来得到的,总之,最终就是要得到数据.提一下最重要的东西,我把它叫做代理,如同一个校园代理,没有他 ...

  2. Alter the structure of web pages with JavaScript

    Most of the DOM methods you've seen so far are useful for identifying elements. Both getElementById ...

  3. laravel5.5路由使用name的好处

    使用name的好处 辅助函数 route 可以用于为指定路由生成 URL.命名路由生成的 URL 不与路由上定义的 URL 相耦合.因此,就算路由的 URL 有任何更改,都不需要对 route 函数调 ...

  4. 浅析src与href的区别

    src与href的区别 SRC src用于替换当前元素,href用于在当前文档和引用资源之间确立联系. src是source的缩写,指向外部资源的位置,指向的内容将会嵌入到文档中当前标签所在位置:在请 ...

  5. 剑指Offer - 九度1367 - 二叉搜索树的后序遍历序列

    剑指Offer - 九度1367 - 二叉搜索树的后序遍历序列2013-11-23 03:16 题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出 ...

  6. 《Cracking the Coding Interview》——第18章:难题——题目1

    2014-04-29 00:56 题目:不用算数运算,完成加法. 解法:那就位运算吧,用加法器的做法就可以了. 代码: // 18.1 add two numbers wihout using ari ...

  7. 【Python】python内置函数、列表生成式、生成器

    一.内置函数 1 print(all([1,2,3,4]))#判断可迭代的对象里面的值是否都为真 2 print(any([0,1,2,3,4]))#判断可迭代的对象里面的值是否有一个为真 3 pri ...

  8. Cookies 、 Session 和 token 的区别

    这篇文章写的 Cookies 和 Session的区别 比较详细,也很好理解,可以学习下:https://blog.csdn.net/axin66ok/article/details/6175522 ...

  9. NGUI-UIScroll View的使用及注意点

    项目层次: scrollviewbg是600x150的背景图,Inspector视图如下: panel就是scrollview父容器了,size为600x150,Inspector视图如下: item ...

  10. Kickstart配置文件解析

    参考:https://www.douban.com/note/270359374/?type=likehttp://blog.51cto.com/molinux/548247http://debugo ...