小Z爱图论(NOIP信(sang)心(bin)赛)From FallDream
题目:
小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的更多相关文章
- 小Z爱序列(NOIP信(sang)心(bin)赛)From FallDream(粗制单调队列&单调栈的算法解析)
原题: 小Z最擅长解决序列问题啦,什么最长公共上升然后下降然后上升的子序列,小Z都是轻松解决的呢. 但是小Z不擅长出序列问题啊,所以它给了你一道签到题. 给定一个n个数的序列ai,你要求出满足下述条件 ...
- 小Z爱划水(NOIP信(sang)心(bin)赛)From FallDream
题目: 小Z在机房.他和其它机房同学都面临一个艰难的抉择,那就是 要不要划水? 每个人都有自己的一个意见,有的人想做题,有的人想划水. 当然,每个人只能选择一个事情做.如果一个人做的事情和他想做的不同 ...
- 【20170920校内模拟赛】小Z爱学习
所有题目开启-O2优化,开大栈空间,评测机效率为4亿左右. T1 小 Z 学数学(math) Description 要说小 Z 最不擅长的学科,那一定就是数学了.这不,他最近正在学习加法运算.老 ...
- 【0521模拟赛】小Z爱数学
题目描述 小Z想求F(n,k),F(n,k)表示n的所有因数pi中,满足n/pi <= k 的和. 小Z发现还是很水,所以他决定加大难度. 求 小Z还准备了很多个询问.现在你来解决一下吧. 输入 ...
- 【0521模拟赛】小Z爱划水
题目描述 小Z和其它机房同学都面临一个艰难的抉择,那就是 要不要划水? 每个人都有自己的一个意见,有的人想做题,有的人想划水. 当然,每个人只能选择一个事情做.如果一个人做的事情和他想做的不同,那么他 ...
- 2017-10-5模拟赛T2 小Z爱排序(sorting.*)
Description Solution 比赛时找到了规律,但是没有证出来……(当然最后还是AC了……) 显然没有被操作的数在排好序的序列中一定是连续的一段. 所以,没有被操作的数一定从左到右连续地递 ...
- 【20170521校内模拟赛】热爱生活的小Z
学长FallDream所出的模拟赛,个人感觉题目难度还是比较适中的,难度在提高+左右,可能比较接近弱省省选,总体来讲试题考查范围较广,个人认为还是很不错的. 所有试题如无特殊声明,开启-O2优化,时限 ...
- 【BZOJ2038】【莫队】小z的袜子
Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命……具体来说,小Z把这N只袜 ...
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose) [莫队算法]【学习笔记】
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 7687 Solved: 3516[Subm ...
随机推荐
- iar注释快捷键
选中多行后注释快捷键:Ctrl+K 取消多行注释快捷键:Ctrl+Shift+K
- Git Cheatshell - Pro Git
A git cheatshell based on the book: http://www.git-scm.com/book/en/v2. Repository Configuration git ...
- android singleTop 不起作用
今天,排查问题,发现设置了singleTop 的activity, 多次启动依然是多个acitivity,而不是一个. 明明在清单里面设置了,但是就是启动了多个. 可能是因为启动的太快,导致系统判断有 ...
- 树莓派网线连接后通过ssh远程连接
新安装的树莓派默认是不支持ssh远程连接的,通过PuTTY (64-bit)会提示连接被拒绝. 本文支持笔记本或pc直接通过网线连接树莓派,具体操作步骤如下: 一.确定树莓派的ip地址及是否开启ssh ...
- react基本知识点合集
妹子UI里面有React的相关组件与用法:http://amazeui.org/react/components React官方网站:https://facebook.github.io/react/ ...
- 示例解读Java的跨平台原理
首先简单的解释一下Java跨平台的特征,相当于说写一个Java程序论述上可以运行在不同的操作系统平台上面(此处的平台我们就简单的看成是操作系统平台).下面我们用一些事例来说明它的好处. 我们先了解一些 ...
- 《Cracking the Coding Interview》——第8章:面向对象设计——题目4
2014-04-23 18:17 题目:设计一个停车位的类. 解法:停车位,就要有停车.取车的功能了.另外我还加了一个工作线程用于计费,每秒给那些有车的车位加1块钱费用. 代码: // 8.4 Des ...
- 最近做group assignment需要些加密的知識
需求:A給B單向發的數據需要被加密,A和B都可以看到原文.加密后,就算傳輸的過程被竊取,也無法得知數據原文.A可以是任何客戶端. 解決:常用的MD5,sha1等常用的加密算法為單向不可逆,顯然不符合需 ...
- Python 爬取网页中JavaScript动态添加的内容(一)
当我们进行网页爬虫时,我们会利用一定的规则从返回的 HTML 数据中提取出有效的信息.但是如果网页中含有 JavaScript 代码,我们必须经过渲染处理才能获得原始数据.此时,如果我们仍采用常规方法 ...
- python之上下文管理、redis的发布订阅、rabbitmq
使用with打开文件的方式,是调用了上下文管理的功能 #打开文件的两种方法: f = open('a.txt','r') with open('a.txt','r') as f 实现使用with关闭s ...