CF1037E Trips (离线+图上构造)
题目大意:一共有n个人,每天早上会有两个人成为朋友,朋友关系不具有传递性,晚上,它们会组织旅游,如果一个人去旅游,那么他不少于$k$个朋友也要和他去旅游,求每天的最大旅游人数
一开始并没有想到反向建图,并查集搞了好久也没出解,看了题解的思路,大概是这样的
转化问题,反向建图,把正序往图里建边换成每次倒序在图里删边。
显然,一开始/删掉边之后,度小于K的点一定不可用,那么把它删掉,和它相连的边也删掉
那么可能这个点删掉以后,和它相连的某个点度也小于K了,再把那个点也删掉...发现这是一个类似于拓扑的过程
由于每个点只会被删掉1次,所以复杂度大约是$O(n+m)$
边全都加完的图中,也可能有些点既没有入度也没有出度,答案里要把它们去掉
- #include <set>
- #include <queue>
- #include <cstdio>
- #include <cstring>
- #include <algorithm>
- #define N 200100
- #define ll long long
- using namespace std;
- //re
- int gint()
- {
- int ret=,fh=;char c=getchar();
- while(c<''||c>''){if(c=='-')fh=-;c=getchar();}
- while(c>=''&c<=''){ret=ret*+c-'';c=getchar();}
- return ret*fh;
- }
- int n,m,K,ma,cte,sum;
- int head[N],inc[N],ans[N];
- struct Edge{int to,nxt,val;}edge[N*];
- void ae(int u,int v){
- cte++;edge[cte].to=v,inc[v]++;
- edge[cte].nxt=head[u],head[u]=cte;}
- queue<int>que;
- void Pop(int x)
- {
- que.push(x);
- while(!que.empty())
- {
- int x=que.front();que.pop();
- if(head[x]!=) sum--;
- for(int j=head[x];j;j=edge[j].nxt){
- if(edge[j].val==-)continue;
- edge[j].val=edge[j^].val=-;
- int v=edge[j].to;
- inc[v]--;
- if(inc[v]<K) que.push(v);
- }head[x]=;
- }
- }
- int main()
- {
- scanf("%d%d%d",&n,&m,&K);
- int x,y,z;cte=;sum=n;
- for(int i=;i<=m;i++)
- x=gint(),y=gint(),ae(x,y),ae(y,x);
- for(int i=;i<=n;i++)
- if(head[i]==) sum--;
- for(int i=;i<=n;i++)
- if(inc[i]<K) Pop(i);
- for(int j=m;j>=;j--)
- {
- ans[j]=sum;
- if(edge[j<<].val==-)
- {continue;}
- x=edge[j<<].to;
- y=edge[j<<|].to;
- inc[x]--,inc[y]--;
- edge[j<<].val=edge[j<<|].val=-;
- if(inc[x]<K) Pop(x);
- if(inc[y]<K) Pop(y);
- }
- for(int j=;j<=m;j++)
- printf("%d\n",ans[j]);
- return ;
- }
CF1037E Trips (离线+图上构造)的更多相关文章
- 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 ...
- CF1019C Sergey's problem (图上构造)
题目大意:给你一个有向连通图,让你找出一个点集,保证点集内的点之间没有直接连边,且集合中存在一点,到一个 非点集中的点的距离小于等于2 思路很清奇 首先编号从小到大遍历每个点,如果这个点没有被访问过, ...
- matlab中,在灰度解剖图上叠加阈值图,by by DR. Rajeev Raizada
1.参考 reference 1. tutorial主页:http://www.bcs.rochester.edu/people/raizada/fmri-matlab.htm. 2.speech_b ...
- yii2组件之多图上传插件FileInput的详细使用
作者:白狼 出处:http://www.manks.top/yii2_multiply_images.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连 ...
- [python]沪深龙虎榜数据导入通达信的自选板块,并标注于K线图上
将沪深龙虎榜数据导入通达信的自选板块,并标注于K线图上 原理:python读取前一次处理完的计算5日后涨跌幅输出的csv文件 文件名前加"[paint]" 安照通达信的画图文件和板 ...
- matlab 将多个盒图放在一张图上
1.boxplot 将多个盒图放在一张图上 x1 = normrnd(5,1,100,1)';x2 = normrnd(6,1,200,1)';X = [x1 x2];G = [zeros(size( ...
- ajax 异步插入图片到数据库(多图上传)
额 大概就这么个样子...截个图 点浏览 选择几张图片 选择完了 确定一下 然后插入数据库 同时在页面中显示插入的图片,代码 也没啥.看下 index.php <html><hea ...
- iOS 使用AFN 进行单图和多图上传
图片上传时必要将图片进行压缩,不然会上传失败 1.单张图上传 AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManag ...
- PHP之:多图上传
撰写日期:2016-6-30 15:17:35 Thursday 参考 http://a3147972.blog.51cto.com/2366547/1381136 (08-05ThinkPHP+sw ...
随机推荐
- Python全双工聊天
全双工聊天 全双工聊天:服务端和客户端都可以发送并接收信息. 使用select模块中的select方法 select(rlist, wlist, xlist[, timeout]) -> (rl ...
- 第二篇:SpringBoot配置详解
SpringBoot 是为了简化 Spring 应用的创建.运行.调试.部署等一系列问题而诞生的产物,自动装配的特性让我们可以更好的关注业务本身而不是外部的XML配置,我们只需遵循规范,引入相关的依赖 ...
- POI进行ExcelSheet的拷贝
POI进行ExcelSheet的拷贝 学习了:http://www.360doc.com/content/17/0508/20/42823223_652205632.shtml,这个也需要改改 这个: ...
- 【算法拾遗(java描写叙述)】--- 选择排序(直接选择排序、堆排序)
选择排序的基本思想 每一趟从待排序的记录中选出关键字最小的记录,顺序放在已排好序的子文件的最后,知道所有记录排序完毕.主要有两种选择排序方法:直接选择排序(或称简单选择排序)和堆排序. 直接选择排序 ...
- 单词数 (STL set集合)
单词数 Problem Description lily的好朋友xiaoou333近期非常空.他想了一件没有什么意义的事情.就是统计一篇文章里不同单词的总数.以下你的任务是帮助xiaoou333解决问 ...
- java 抽象类和接口的差别
语法层面上: 1)抽象类能够提供成员方法的实现细节.而接口中仅仅能存在public abstract 方法. 2)抽象类中的成员变量能够是各种类型的.而接口中的成员变量仅仅能是public st ...
- 页面与后台传递中文乱码问题(java乱码)
1.前台中文传递到后台乱码. 前台不须要处理, 系统一般都会默认把中文转化为ISO-8859-1类型. 仅仅需在后台接受数据是处理 Str为前台传过来的中文字符串: String inputer = ...
- 文件重命名之动态改动ListView里指定Item中的组件属性
在Android实际开发过程中常常会遇到,改动ListView中某一项的值.怎样达到这一目的呢? 方法主要有两种: 第一种方式:当ListView中某一项的值发生变化之后,又一次载入数据已达到更新Li ...
- ASP.NET六大巨头——内置对象(1)
ASP.NET提供了六个内置对象:Request.Response.Application.Session.Server和Cookie.这些对象收集当前应用程序请求.用户信息.响应浏览器信息,来完毕页 ...
- 三大表连接方式详解之Nested loop join和 Sort merge join
在早期版本,Oracle提供的是nested-loop join,两表连接就相当于二重循环,假定两表分别有m行和n行 如果内循环是全表扫描,时间复杂度就是O(m*n) 如果内循 ...