题目描述

  定义一个图的连通度为图中可达顶点对的数目。给你一个\(n\)个点的有向图,问你这个图的连通度。

  \(n\leq 2000,m\leq n^2\)

题解

  一个很简单的做法就是传递闭包:像floyd算法一样处理两个点之间是否可达。

\[f_{i,j}|=f_{i,k}\&f_{k,j}
\]

  但是这是\(O(n^3)\)的。

  观察到用到的运算都是位运算,那就用bitset加速一下就行了。

  时间复杂度:\(O(\frac{n^3}{64})\)(还是\(O(n^3)\))

代码

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. #include<cstdlib>
  5. #include<ctime>
  6. #include<utility>
  7. #include<cmath>
  8. #include<functional>
  9. #include<bitset>
  10. using namespace std;
  11. typedef long long ll;
  12. typedef unsigned long long ull;
  13. typedef pair<int,int> pii;
  14. typedef pair<ll,ll> pll;
  15. void sort(int &a,int &b)
  16. {
  17. if(a>b)
  18. swap(a,b);
  19. }
  20. void open(const char *s)
  21. {
  22. #ifndef ONLINE_JUDGE
  23. char str[100];
  24. sprintf(str,"%s.in",s);
  25. freopen(str,"r",stdin);
  26. sprintf(str,"%s.out",s);
  27. freopen(str,"w",stdout);
  28. #endif
  29. }
  30. int rd()
  31. {
  32. int s=0,c;
  33. while((c=getchar())<'0'||c>'9');
  34. do
  35. {
  36. s=s*10+c-'0';
  37. }
  38. while((c=getchar())>='0'&&c<='9');
  39. return s;
  40. }
  41. int upmin(int &a,int b)
  42. {
  43. if(b<a)
  44. {
  45. a=b;
  46. return 1;
  47. }
  48. return 0;
  49. }
  50. int upmax(int &a,int b)
  51. {
  52. if(b>a)
  53. {
  54. a=b;
  55. return 1;
  56. }
  57. return 0;
  58. }
  59. bitset<2001> f[2010];
  60. char s[2010];
  61. int main()
  62. {
  63. int n;
  64. int i,j;
  65. scanf("%d",&n);
  66. for(i=1;i<=n;i++)
  67. {
  68. scanf("%s",s+1);
  69. for(j=1;j<=n;j++)
  70. if(s[j]-'0')
  71. f[i].set(j);
  72. f[i].set(i);
  73. }
  74. for(j=1;j<=n;j++)
  75. for(i=1;i<=n;i++)
  76. if(i!=j&&f[i][j])
  77. f[i]|=f[j];
  78. int s=0;
  79. for(i=1;i<=n;i++)
  80. s+=f[i].count();
  81. printf("%d\n",s);
  82. return 0;
  83. }

【BZOJ2208】【JSOI2010】连通数 传递闭包的更多相关文章

  1. [bzoj2208][Jsoi2010]连通数_bitset_传递闭包floyd

    连通数 bzoj-2208 Jsoi-2010 题目大意:给定一个n个节点的有向图,问每个节点可以到达的点的个数和. 注释:$1\le n\le 2000$. 想法:网上有好多tarjan+拓扑序dp ...

  2. bzoj2208 [Jsoi2010]连通数(scc+bitset)

    2208: [Jsoi2010]连通数 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 1879  Solved: 778[Submit][Status ...

  3. BZOJ2208 [Jsoi2010]连通数[缩点/Floyd传递闭包+bitset优化]

    显然并不能直接dfs,因为$m$会非常大,复杂度就是$O(mn)$: 这题有三种做法,都用到了bitset的优化.第二种算是一个意外的收获,之前没想到竟然还有这种神仙操作.. 方法一:缩点+DAG上b ...

  4. [BZOJ2208][Jsoi2010]连通数 暴力枚举

    Description Input 输入数据第一行是图顶点的数量,一个正整数N. 接下来N行,每行N个字符.第i行第j列的1表示顶点i到j有边,0则表示无边. Output 输出一行一个整数,表示该图 ...

  5. BZOJ2208: [Jsoi2010]连通数

    tarjan缩点后拓扑排序,每一个点用一个bitset记录哪些点能到达它. PS:数据太水,暴力能过. #include<bits/stdc++.h> using namespace st ...

  6. Luogu P4306 [JSOI2010]连通数 传递闭包

    正解其实是\(Tarjan\) + \(拓扑拓扑\),但是却可以被\(O(N^3 / 32)\)复杂度的传递闭包水过去.心疼一下写拓扑的小可爱们. 学到一个\(bitset\)优化布尔图的骚操作,直接 ...

  7. 2018.09.11 bzoj2208: [Jsoi2010]连通数(bitset+floyd)

    传送门 听说正解是缩点+dfs? 直接bitset优化floyd传递闭包就行了.(尽管时间复杂度是假的O(n3/32)" role="presentation" styl ...

  8. BZOJ2208:[JSOI2010]连通数(DFS)

    Description Input 输入数据第一行是图顶点的数量,一个正整数N. 接下来N行,每行N个字符.第i行第j列的1表示顶点i到j有边,0则表示无边. Output 输出一行一个整数,表示该图 ...

  9. BZOJ2208 [Jsoi2010]连通数 【图的遍历】

    题目 输入格式 输入数据第一行是图顶点的数量,一个正整数N. 接下来N行,每行N个字符.第i行第j列的1表示顶点i到j有边,0则表示无边. 输出格式 输出一行一个整数,表示该图的连通数. 输入样例 3 ...

  10. [BZOJ2208]:[Jsoi2010]连通数(暴力 or bitset or 塔尖?)

    题目传送门 题目描述 度量一个有向图连通情况的一个指标是连通数,指图中可达顶点对的个数. 在上图中,顶点1可以到达1.2.3.4.5. 顶点2可以到达2.3.4.5. 顶点3可以到达3.4.5. 顶点 ...

随机推荐

  1. Python—元类

    什么是元类? 元类是类的类,是类的模板 元类是用来控制如何创建类的,正如类是创建对象的模板一样,而元类的主要目的是为了控制类的创建行为 元类的实例化的结果为我们用class定义的类,正如类的实例为对象 ...

  2. Servlet 转发请求与重定向,以及路径问题

    转发请求 当一个servlet接收到请求后,如果需要将请求转发给另外一个servlet或者jsp文件,可使用下面这种方法: package cn.ganlixin.servlet; import ja ...

  3. MySQL左连接时 返回的记录条数 比 左边表 数量多

    在学MySQL的连接时,为了便于记忆,就将左连接 记做 最后结果的总记录数 和 进行左连接的左表的记录数相同,简单的说就是下面这个公式 count(table A left join table B) ...

  4. 中国科学技术大学统一身份认证系统CAS

    CAS | Apereohttps://www.apereo.org/projects/cas 中国科学技术大学统一身份认证系统https://passport.ustc.edu.cn/login?s ...

  5. web安全测试排查

    漏洞排查思路: 1.上传漏洞 如果看到:选择你要上传的文件 [重新上传]或者出现“请登陆后使用”,80%就有漏洞了! 有时上传不一定会成功,这是因为Cookies不一样.我们就要用WSockExper ...

  6. jquery on绑定事件

    描述:给一个或多个元素(当前的或未来的)的一个或多个事件绑定一个事件处理函数.(1.7版本开始支持,是 bind().live() 和 delegate() 方法的新的替代品) 语法:.on( eve ...

  7. mybatis出现NoSuchMethodException异常

    今天在idea中调试项目(ssm搭建的项目)的时候,mybatis突然出现了NoSuchMethodException异常,具体的异常时: java.lang.NoSuchMethodExceptio ...

  8. Jenkins整合SonarQube代码检测工具

    借鉴博客:https://blog.csdn.net/kefengwang/article/details/54377055 上面这博客写得挺详细的,挺不错.它这个博客没有提供下载的教程,这个博客提供 ...

  9. Eclipse导入工程后出现中文乱码

    Eclipse之所以会出现乱码问题是因为eclipse编辑器选择的编码规则是可变的.一般默认都是UTF-8或者GBK,当从外部导入的一个工程时,如果该工程的编码方式与eclipse中设置的编码方式不同 ...

  10. java学习之—递归实现二分查找法

    /** * 递归实现二分查找法 * Create by Administrator * 2018/6/21 0021 * 上午 11:25 **/ class OrdArray{ private lo ...