这道题如果没有功率的限制,显然就是一个裸的2-sat

考虑将功率的限制也放在图上:如果选择了功率i,那么功率区间不包含它的点只能不选,连边即可

但是这样建图的边数是o(n^2),需要优化

将功率区间分为两种,一种在这个点前面,另一种在这个点的后面

同样将功率也裂成两个点,分别连向这两种区间,因为功率i的第1种点一定是功率i+1的第一种点的子集,因此(i+1)1->i1和功率右区间恰好在i+1的点,同理(i-1)2->i2和功率左区间恰好为i-1的点

对图求强连通,如果裂成的两个点中在同一个强连通就不行,否则所有选1的区间都要选,功率是最大的i2

  1. 1 #include<bits/stdc++.h>
  2. 2 using namespace std;
  3. 3 #define N 1600005
  4. 4 struct ji{
  5. 5 int nex,to;
  6. 6 }edge[N<<2];
  7. 7 int E,n,m,m1,m2,x,y,ans,head[N],vis[N],dfn[N],low[N],s[N];
  8. 8 void add(int x,int y){
  9. 9 edge[E].nex=head[x];
  10. 10 edge[E].to=y;
  11. 11 head[x]=E++;
  12. 12 }
  13. 13 void dfs(int k){
  14. 14 dfn[k]=low[k]=++x;
  15. 15 s[++s[0]]=k;
  16. 16 for(int i=head[k];i!=-1;i=edge[i].nex){
  17. 17 int v=edge[i].to;
  18. 18 if (!dfn[v]){
  19. 19 dfs(v);
  20. 20 low[k]=min(low[k],low[v]);
  21. 21 }
  22. 22 else
  23. 23 if (!vis[v])low[k]=min(low[k],dfn[v]);
  24. 24 }
  25. 25 if (dfn[k]==low[k]){
  26. 26 vis[k]=++vis[0];
  27. 27 while (s[s[0]]!=k)vis[s[s[0]--]]=vis[0];
  28. 28 s[0]--;
  29. 29 }
  30. 30 }
  31. 31 int main(){
  32. 32 scanf("%d%d%d%d",&m1,&n,&m,&m2);
  33. 33 memset(head,-1,sizeof(head));
  34. 34 for(int i=1;i<=m1;i++){
  35. 35 scanf("%d%d",&x,&y);
  36. 36 add(2*x-1,2*y);
  37. 37 add(2*y-1,2*x);
  38. 38 }
  39. 39 for(int i=1;i<=n;i++){
  40. 40 scanf("%d%d",&x,&y);
  41. 41 add(2*i,2*n+2*x);
  42. 42 add(2*n+2*x-1,2*i-1);
  43. 43 if (y<m){
  44. 44 add(2*i,2*n+2*y+1);
  45. 45 add(2*n+2*y+2,2*i-1);
  46. 46 }
  47. 47 }
  48. 48 for(int i=1;i<=m2;i++){
  49. 49 scanf("%d%d",&x,&y);
  50. 50 add(2*x,2*y-1);
  51. 51 add(2*y,2*x-1);
  52. 52 }
  53. 53 for(int i=1;i<m;i++){
  54. 54 add(2*n+2*i+2,2*n+2*i);
  55. 55 add(2*n+2*i-1,2*n+2*i+1);
  56. 56 }
  57. 57 x=0;
  58. 58 for(int i=2;i<=2*(n+m);i+=2)
  59. 59 if (!dfn[i])dfs(i);
  60. 60 for(int i=1;i<=2*(n+m);i+=2)
  61. 61 if (!dfn[i])dfs(i);
  62. 62 for(int i=1;i<=n+m;i++)
  63. 63 if (vis[2*i-1]==vis[2*i]){
  64. 64 printf("-1");
  65. 65 return 0;
  66. 66 }
  67. 67 for(int i=1;i<=n;i++)ans+=(vis[2*i]<vis[2*i-1]);
  68. 68 for(int i=m;i;i--)
  69. 69 if (vis[2*n+2*i]<vis[2*n+2*i-1]){
  70. 70 printf("%d %d\n",ans,i);
  71. 71 for(int j=1;j<=n;j++)
  72. 72 if (vis[2*j]<vis[2*j-1])printf("%d ",j);
  73. 73 return 0;
  74. 74 }
  75. 75 }

[cf1215F]Radio Stations的更多相关文章

  1. CodeForces - 762E:Radio stations (CDQ分治||排序二分)

    In the lattice points of the coordinate line there are n radio stations, the i-th of which is descri ...

  2. 【CF1215F】 Radio Stations

    题目 比较精妙的\(\text{2-sat}\)建图了 还是按照套路把每个电台拆成\((0/1,i)\)表示不选/选 前两种连边是板子就不解释了 考虑如何限制选择一个唯一的\(f\),并且还能限制不选 ...

  3. 【题解】Radio stations Codeforces 762E CDQ分治

    虽然说好像这题有其他做法,但是在问题转化之后,使用CDQ分治是显而易见的 并且如果CDQ打的熟练的话,码量也不算大,打的也很快,思维难度也很小 没学过CDQ分治的话,可以去看看我的另一篇博客,是CDQ ...

  4. CF762E Radio Stations

    题目戳这里. 我还以为是KDtree呢,但是KDtree应该也可以做吧. 这是一道数据结构好题.考虑到由于\(K \le 10\),所以我们用两个大vector--\(Left,Right\),\(L ...

  5. Radio stations CodeForces - 762E (cdq分治)

    大意: 给定$n$个三元组$(x,r,f)$, 求所有对$(i,j)$, 满足$i<j, |f_i-f_j|\le k, min(r_i,r_j)\ge |x_i-x_j|$ 按$r$降序排, ...

  6. Codeforces 1215F. Radio Stations

    传送门 题目看一半:"woc 裸的 $2-sat$ 白给??" 看完以后:"...???" 如果没有 $f$ 的限制,那就是个白给的 $2-sat$ 问题,但是 ...

  7. 2-SAT习题讲解

    2-SAT习题讲解 讲在前面:下述例题不是按照难度顺序的,而且基本就只会讲解建图的过程.下面讲解中$A'$为$A$的反向状态. 一.bzoj习题 例一:$bzoj2199 奶牛议会$ 首先我们考虑本题 ...

  8. Hijacking FM Radio with a Raspberry Pi & Wire

    转载:https://null-byte.wonderhowto.com/how-to/hack-radio-frequencies-hijacking-fm-radio-with-raspberry ...

  9. 【英语魔法俱乐部——读书笔记】 2 中级句型-复句&合句(Complex Sentences、Compound Sentences)

    [英语魔法俱乐部——读书笔记] 2 中级句型-复句&合句(Complex Sentences.Compound Sentences):(2.1)名词从句.(2.2)副词从句.(2.3)关系从句 ...

随机推荐

  1. mapboxgl 纠偏百度地图

    缘起 之前分享了mapboxgl 互联网地图纠偏插件,插件当时只集成了高德地图. 文章发布后,有小伙伴在后台留言,希望插件也能支持百度地图. 刚好国庆假期有时间就研究了一下. 插件加载瓦片原理 首先, ...

  2. 在Windows Server 2012R2离线安装.net framework3.5

    最近新装了一台Windows Server 2012 R2的服务器,安装数据库时,出现了提示安装不上 .net framework3.5的情况,经过网络上多次的资料查找及反复试验终于找到了一个可以解决 ...

  3. 微服务+异步工作流+ Serverless,Netflix 决定弃用稳定运行 7 年的旧平台

    作者 | Frank San Miguel 策划 | 田晓旭 2021 年,Netflix 会将大部分的工作负载从 Reloaded 转移到 Cosmos 平台.Cosmos 是一个计算平台,它将微服 ...

  4. RobotFramework+Selenium如何提高脚本稳定性

     通过RF来跑selenium的脚本,正常运行一遍都没有问题,但如果要多次运行,提高脚本的稳定性,那么应该如何做呢?  当然有时候最简单最简单的方法就是直接通过sleep来等待,虽然简单粗暴,但会带来 ...

  5. SQL Server链接服务器信息查询

    exec sp_helpserver --查询链接服务器select * from sys.servers --查询链接服务器链接地址

  6. SpringBoot之日志注解和缓存优化

    SpringBoot之日志注解和缓存优化 日志注解: 关于SpringBoot中的日志处理,在之前的文章中页写过: 点击进入 这次通过注解+Aop的方式来实现日志的输出: 首先需要定义一个注解类: @ ...

  7. FastAPI 学习之路(六)查询参数,字符串的校验

    系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之 ...

  8. 《看漫画学Pyhton》中计算水仙花数

    利用while循环实现 i = 100 r = 0 s = 0 t = 0 while i < 1000: r = i // 100 s = (i - r * 100) // 10 t = i ...

  9. Manjaro安装Mariadb

    Mariadb是MySQL的一个复刻.由于MySQL被Oracle公司收购,MySQL的一些原始开发者担心MySQL会有开源方面的某些隐患,故领导开发了Mariadb. 如今,Mariadb已经作为许 ...

  10. 谜语人队 Scrum Meeting 博客汇总

    项目 内容 课程主页 2021春季软件工程(罗杰 任健) 作业要求地址 Alpha阶段:团队项目-每日例会报告Beta阶段:团队项目-每日例会报告 团队博客主页 谜语人队 一.Alpha阶段 第一次例 ...