考试的时候昏了头 没算空间 这道题我爆零了。值得注意的是 一般认为bitset的空间是 int 的1/w倍

对于那m条边 无论如何构造 这m条关系都是存在的 题目其实是想让我们用这m条关系来计算给出的 t条关系是否合法。

合法把这m条边输出即可。

这道题 虽然不是多组数据 但是评测时开了subtask. 果然 判定对错的题目 基本上不给水分的机会...

缩过点之后 剩下的是可达性问题 这是一个经典问题 如果点不是类似于区间性的问题 最快也只能使用bitset来解决 这个大概是常识吧.

发现 mn/w 勉强可以卡过 但是会爆空间。

这种问题 算是很常见的问题 如 求5,6维偏序的时候 bitset空间容易爆 一般采用根号分治法。

对n个点进行分块 每次统计一个 块内的点对应的询问即可。

设 块大小为 S 那么数量为 n/S 每次统计一下 n/SmS/w=nm/w.

空间复杂度 nS/w.

可以发现 时间不会变得更差 空间变小 取S等于sqrt(n)即可。

  1. const int MAXN=100005;
  2. int n,m,Q,len,top,id,cnt;
  3. int s[MAXN],c[MAXN],low[MAXN],dfn[MAXN];
  4. int lin[MAXN],ver[MAXN],nex[MAXN],ru[MAXN];
  5. int lin1[MAXN],ver1[MAXN],nex1[MAXN];
  6. bitset<430>b[MAXN];
  7. int q[MAXN],w[MAXN];
  8. struct wy{int x,y;}t[MAXN],g[MAXN];
  9. inline void add(int x,int y)
  10. {
  11. ver[++len]=y;
  12. nex[len]=lin[x];
  13. lin[x]=len;
  14. }
  15. inline void add1(int x,int y)
  16. {
  17. ver1[++len]=y;
  18. nex1[len]=lin1[x];
  19. lin1[x]=len;
  20. ++w[y];
  21. }
  22. inline void dfs(int x)
  23. {
  24. s[++top]=x;low[x]=dfn[x]=++cnt;
  25. go(x)
  26. {
  27. if(!dfn[tn])
  28. {
  29. dfs(tn);
  30. low[x]=min(low[x],low[tn]);
  31. }
  32. else if(!c[tn])low[x]=min(low[x],dfn[tn]);
  33. }
  34. if(dfn[x]==low[x])
  35. {
  36. int y=0;
  37. ++id;
  38. while(y!=x)
  39. {
  40. y=s[top--];
  41. c[y]=id;
  42. }
  43. }
  44. }
  45. inline void topsort()
  46. {
  47. int l=0,r=0;
  48. rep(1,id,i){if(!ru[i])q[++r]=i;}
  49. while(++l<=r)
  50. {
  51. int x=q[l];
  52. for(int i=lin1[x];i;i=nex1[i])
  53. {
  54. int tn=ver1[i];
  55. b[tn]=b[tn]|b[x];
  56. --ru[tn];
  57. if(!ru[tn])q[++r]=tn;
  58. }
  59. }
  60. }
  61. inline int cmp(wy a,wy b){return a.y<b.y;}
  62. int main()
  63. {
  64. freopen("gplt.in","r",stdin);
  65. freopen("gplt.out","w",stdout);
  66. get(n);get(m);
  67. rep(1,m,i)
  68. {
  69. int x,y;
  70. get(x);get(y);
  71. t[i]=(wy){x,y};
  72. add(x,y);
  73. }
  74. rep(1,n,i)if(!dfn[i])dfs(i);
  75. len=0;
  76. rep(1,n,j)
  77. {
  78. go(j)
  79. {
  80. if(c[tn]==c[j])continue;
  81. add1(c[tn],c[j]);
  82. }
  83. }
  84. int B=(int)sqrt(1.0*id)+1;
  85. int ww=(id-1)/B+1;
  86. get(Q);
  87. rep(1,Q,i)
  88. {
  89. int get(x);int get(y);
  90. x=c[x];y=c[y];
  91. g[i]=(wy){x,y};
  92. }
  93. sort(g+1,g+1+Q,cmp);
  94. int flag=1;
  95. rep(1,ww,i)
  96. {
  97. int L=(i-1)*B+1;
  98. int R=min(id,i*B);
  99. rep(L,R,j)b[j][j-L]=1;
  100. topsort();
  101. while(g[flag].y<=R&&flag<=Q)
  102. {
  103. if(b[g[flag].x][g[flag].y-L]==1)
  104. {
  105. puts("NO");
  106. return 0;
  107. }
  108. ++flag;
  109. }
  110. if(flag==Q+1)break;
  111. rep(1,id,j)b[j].reset(),ru[j]=w[j];
  112. }
  113. puts("YES");
  114. put(m);
  115. rep(1,m,i)printf("%d %d\n",t[i].x,t[i].y);
  116. return 0;
  117. }

没脑子选手丢人了。

4.13 省选模拟赛 传销组织 bitset 强连通分量 分块的更多相关文章

  1. 5.13 省选模拟赛 优雅的绽放吧,墨染樱花 多项式 prufer序列 计数 dp

    LINK:优雅的绽放吧,墨染樱花 当时考完只会50分的做法 最近做了某道题受到启发 故会做这道题目了.(末尾附30分 50分 100分code 看到度数容易想到prufer序列 考虑dp统计方案数. ...

  2. 4.13 省选模拟赛 树 树形dp 卷积 NTT优化dp.

    考试的时候 看到概率 看到期望我就怂 推了一波矩阵树推自闭了 发现 边权点权的什么也不是. 想到了树形dp 维护所有边的断开情况 然后发现数联通块的和再k次方过于困难. 这个时候 应该仔细观察一下 和 ...

  3. 【洛谷比赛】[LnOI2019]长脖子鹿省选模拟赛 T1 题解

    今天是[LnOI2019]长脖子鹿省选模拟赛的时间,小编表示考的不怎么样,改了半天也只会改第一题,那也先呈上题解吧. T1:P5248 [LnOI2019SP]快速多项式变换(FPT) 一看这题就很手 ...

  4. @省选模拟赛03/16 - T3@ 超级树

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 一棵 k-超级树(k-SuperTree) 可按如下方法得到:取 ...

  5. 3.28 省选模拟赛 染色 LCT+线段树

    发现和SDOI2017树点涂色差不多 但是当时这道题模拟赛的时候不会写 赛后也没及时订正 所以这场模拟赛的这道题虽然秒想到了LCT和线段树但是最终还是只是打了暴力. 痛定思痛 还是要把这道题给补了. ...

  6. 【FJOI 20170305】省选模拟赛

    题面被改成了个猪... T1猪猪划船(boat) [题目描述] 6只可爱的猪猪们一起旅游,其中有3只大猪A,B,C,他们的孩子为3只小猪a,b,c.由于猪猪们十分凶残,如果小猪在没有父母监护的情况下, ...

  7. 省选模拟赛第四轮 B——O(n^4)->O(n^3)->O(n^2)

    一 稍微转化一下,就是找所有和原树差距不超过k的不同构树的个数 一个挺trick的想法是: 由于矩阵树定理的行列式的值是把邻接矩阵数值看做边权的图的所有生成树的边权乘积之和 那么如果把不存在于原树中的 ...

  8. NOI2019省选模拟赛 第五场

    爆炸了QAQ 传送门 \(A\) \(Mas\)的童年 这题我怎么感觉好像做过--我记得那个时候还因为没有取\(min\)结果\(100\to 0\)-- 因为是个异或我们肯定得按位考虑贡献了 把\( ...

  9. NOI2019省选模拟赛 第六场

    传送门 又炸了-- \(A\) 唐时月夜 不知道改了什么东西之后就\(A\)掉了\(.jpg\) 首先,题目保证"如果一片子水域曾经被操作过,那么在之后的施法中,这片子水域也一定会被操作&q ...

随机推荐

  1. django 缓存(memcached)

    Django提供了6种缓存方式 开发调试缓存 内存缓存 文件缓存 数据库缓存 Memcache缓存(使用python-memcached模块) Memcache缓存(使用pylibmc模块) 常使用的 ...

  2. 三种存储方式DAS、NAS、SAN

    ------------恢复内容开始------------ 一.DAS.NAS.SAN在存储领域的位置 随着主机.磁盘.网络等技术的发展,数据存储的方式和架构也在一直不停改变,本文主要介绍目前主流的 ...

  3. CSS(六)- 内容布局 - Flexbox

    Flexbox是CSS3提供的用于布局的一套新属性,是为了应对行内块.浮动和表格格式产生的问题而生的.其包含针对容器(弹性容器,flex container)和针对其直接子元素(弹性项,flex it ...

  4. Django之 url组件

    本节内容 路由系统 models模型 admin views视图 template模板 路由系统 我们已知,用户从浏览器发出的请求会首先打到django url的路由分发系统这里,然后再到views视 ...

  5. 一个例子理解c++函数模板的编译

    一.例子 template <typename T> inline void callWithMax(const T& a, const T& b){ f(a > b ...

  6. .NET Core CLI 的性能诊断工具介绍

    前言 开发人员的.NET Core项目上线后,经常会出现各种问题,内存泄漏,CPU 100%,处理时间长等, 这个时候就需要快速并准确的发现问题,并解决问题, 除了项目本身的日志记录外,NET Cor ...

  7. C++算法 链式前向星存图

    这个东西恶心了我一阵子,那个什么是什么的上一个一直是背下来的,上次比赛忘了,回来有个题也要用,只能再学一遍,之前也是,不会为什么不学呢.我觉得是因为他们讲的不太容易理解,所以我自己给那些不会的人们讲一 ...

  8. Html笔试复习

    掌握学习技巧,提高学习质量 学习目标:熟练掌握Html笔试复习题 已掌握目标:Html笔试复习题掌握95% 未完成目标:个别题因粗心造成错误,因选项意思不懂出错 解决方案:了解原因,因错出方案,充分利 ...

  9. 前端学习(十):CSS选择器

    进击のpython ***** 前端学习--CSS选择器 每一条CSS样式声明由两部分组成: 选择器{ 样式: } 在CSS中{}之前的部分就是"选择器","选择器&qu ...

  10. socket网络(二)

    作用域 python/js语言中,无块级作用域 if 1 == 1: name = 'alex' print(name) python中以函数为作用域 def func(): name = 'alex ...