题目大意:一共有n个人,每天早上会有两个人成为朋友,朋友关系不具有传递性,晚上,它们会组织旅游,如果一个人去旅游,那么他不少于$k$个朋友也要和他去旅游,求每天的最大旅游人数

一开始并没有想到反向建图,并查集搞了好久也没出解,看了题解的思路,大概是这样的

转化问题,反向建图,把正序往图里建边换成每次倒序在图里删边。

显然,一开始/删掉边之后,度小于K的点一定不可用,那么把它删掉,和它相连的边也删掉

那么可能这个点删掉以后,和它相连的某个点度也小于K了,再把那个点也删掉...发现这是一个类似于拓扑的过程

由于每个点只会被删掉1次,所以复杂度大约是$O(n+m)$

边全都加完的图中,也可能有些点既没有入度也没有出度,答案里要把它们去掉

  1. #include <set>
  2. #include <queue>
  3. #include <cstdio>
  4. #include <cstring>
  5. #include <algorithm>
  6. #define N 200100
  7. #define ll long long
  8. using namespace std;
  9. //re
  10. int gint()
  11. {
  12. int ret=,fh=;char c=getchar();
  13. while(c<''||c>''){if(c=='-')fh=-;c=getchar();}
  14. while(c>=''&c<=''){ret=ret*+c-'';c=getchar();}
  15. return ret*fh;
  16. }
  17. int n,m,K,ma,cte,sum;
  18. int head[N],inc[N],ans[N];
  19. struct Edge{int to,nxt,val;}edge[N*];
  20. void ae(int u,int v){
  21. cte++;edge[cte].to=v,inc[v]++;
  22. edge[cte].nxt=head[u],head[u]=cte;}
  23. queue<int>que;
  24. void Pop(int x)
  25. {
  26. que.push(x);
  27. while(!que.empty())
  28. {
  29. int x=que.front();que.pop();
  30. if(head[x]!=) sum--;
  31. for(int j=head[x];j;j=edge[j].nxt){
  32. if(edge[j].val==-)continue;
  33. edge[j].val=edge[j^].val=-;
  34. int v=edge[j].to;
  35. inc[v]--;
  36. if(inc[v]<K) que.push(v);
  37. }head[x]=;
  38. }
  39. }
  40.  
  41. int main()
  42. {
  43. scanf("%d%d%d",&n,&m,&K);
  44. int x,y,z;cte=;sum=n;
  45. for(int i=;i<=m;i++)
  46. x=gint(),y=gint(),ae(x,y),ae(y,x);
  47. for(int i=;i<=n;i++)
  48. if(head[i]==) sum--;
  49. for(int i=;i<=n;i++)
  50. if(inc[i]<K) Pop(i);
  51. for(int j=m;j>=;j--)
  52. {
  53. ans[j]=sum;
  54. if(edge[j<<].val==-)
  55. {continue;}
  56. x=edge[j<<].to;
  57. y=edge[j<<|].to;
  58. inc[x]--,inc[y]--;
  59. edge[j<<].val=edge[j<<|].val=-;
  60. if(inc[x]<K) Pop(x);
  61. if(inc[y]<K) Pop(y);
  62. }
  63. for(int j=;j<=m;j++)
  64. printf("%d\n",ans[j]);
  65. return ;
  66. }

CF1037E Trips (离线+图上构造)的更多相关文章

  1. 2021.11.14 CF1583E Moment of Bloom(LCA+图上构造)

    2021.11.14 CF1583E Moment of Bloom(LCA+图上构造) https://www.luogu.com.cn/problem/CF1583E 题意: She does h ...

  2. CF1019C Sergey's problem (图上构造)

    题目大意:给你一个有向连通图,让你找出一个点集,保证点集内的点之间没有直接连边,且集合中存在一点,到一个 非点集中的点的距离小于等于2 思路很清奇 首先编号从小到大遍历每个点,如果这个点没有被访问过, ...

  3. matlab中,在灰度解剖图上叠加阈值图,by by DR. Rajeev Raizada

    1.参考 reference 1. tutorial主页:http://www.bcs.rochester.edu/people/raizada/fmri-matlab.htm. 2.speech_b ...

  4. yii2组件之多图上传插件FileInput的详细使用

    作者:白狼 出处:http://www.manks.top/yii2_multiply_images.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连 ...

  5. [python]沪深龙虎榜数据导入通达信的自选板块,并标注于K线图上

    将沪深龙虎榜数据导入通达信的自选板块,并标注于K线图上 原理:python读取前一次处理完的计算5日后涨跌幅输出的csv文件 文件名前加"[paint]" 安照通达信的画图文件和板 ...

  6. matlab 将多个盒图放在一张图上

    1.boxplot 将多个盒图放在一张图上 x1 = normrnd(5,1,100,1)';x2 = normrnd(6,1,200,1)';X = [x1 x2];G = [zeros(size( ...

  7. ajax 异步插入图片到数据库(多图上传)

    额 大概就这么个样子...截个图 点浏览  选择几张图片 选择完了 确定一下 然后插入数据库 同时在页面中显示插入的图片,代码 也没啥.看下 index.php <html><hea ...

  8. iOS 使用AFN 进行单图和多图上传

    图片上传时必要将图片进行压缩,不然会上传失败 1.单张图上传 AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManag ...

  9. PHP之:多图上传

    撰写日期:2016-6-30 15:17:35 Thursday 参考 http://a3147972.blog.51cto.com/2366547/1381136 (08-05ThinkPHP+sw ...

随机推荐

  1. Python全双工聊天

    全双工聊天 全双工聊天:服务端和客户端都可以发送并接收信息. 使用select模块中的select方法 select(rlist, wlist, xlist[, timeout]) -> (rl ...

  2. 第二篇:SpringBoot配置详解

    SpringBoot 是为了简化 Spring 应用的创建.运行.调试.部署等一系列问题而诞生的产物,自动装配的特性让我们可以更好的关注业务本身而不是外部的XML配置,我们只需遵循规范,引入相关的依赖 ...

  3. POI进行ExcelSheet的拷贝

    POI进行ExcelSheet的拷贝 学习了:http://www.360doc.com/content/17/0508/20/42823223_652205632.shtml,这个也需要改改 这个: ...

  4. 【算法拾遗(java描写叙述)】--- 选择排序(直接选择排序、堆排序)

    选择排序的基本思想 每一趟从待排序的记录中选出关键字最小的记录,顺序放在已排好序的子文件的最后,知道所有记录排序完毕.主要有两种选择排序方法:直接选择排序(或称简单选择排序)和堆排序. 直接选择排序 ...

  5. 单词数 (STL set集合)

    单词数 Problem Description lily的好朋友xiaoou333近期非常空.他想了一件没有什么意义的事情.就是统计一篇文章里不同单词的总数.以下你的任务是帮助xiaoou333解决问 ...

  6. java 抽象类和接口的差别

     语法层面上: 1)抽象类能够提供成员方法的实现细节.而接口中仅仅能存在public abstract 方法. 2)抽象类中的成员变量能够是各种类型的.而接口中的成员变量仅仅能是public st ...

  7. 页面与后台传递中文乱码问题(java乱码)

    1.前台中文传递到后台乱码. 前台不须要处理, 系统一般都会默认把中文转化为ISO-8859-1类型. 仅仅需在后台接受数据是处理 Str为前台传过来的中文字符串: String inputer = ...

  8. 文件重命名之动态改动ListView里指定Item中的组件属性

    在Android实际开发过程中常常会遇到,改动ListView中某一项的值.怎样达到这一目的呢? 方法主要有两种: 第一种方式:当ListView中某一项的值发生变化之后,又一次载入数据已达到更新Li ...

  9. ASP.NET六大巨头——内置对象(1)

    ASP.NET提供了六个内置对象:Request.Response.Application.Session.Server和Cookie.这些对象收集当前应用程序请求.用户信息.响应浏览器信息,来完毕页 ...

  10. 三大表连接方式详解之Nested loop join和 Sort merge join

    在早期版本,Oracle提供的是nested-loop join,两表连接就相当于二重循环,假定两表分别有m行和n行       如果内循环是全表扫描,时间复杂度就是O(m*n)       如果内循 ...