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 ...
随机推荐
- 原生node实现简易留言板
原生node实现简易留言板 学习node,实现一个简单的留言板小demo 1. 使用模块 http模块 创建服务 fs模块 操作读取文件 url模块 便于path操作并读取表单提交数据 art-tem ...
- String与StringBuffer与StringBuilder
package test; public class Test { public static void main(String[] args) { StringBuffer sb = new Str ...
- selenium+java启动chrome浏览器
- windowbuilder01 按钮事件监听
- ubuntu--dpkg 被中断
主要原因应该是/var/lib/dpkg/updates 文件夹里面的资料有错误,使得更新软件的程序出现错误,所以得把它们完全删除,通过sudo apt-get update这个指令会重新建立这些资料 ...
- 怎样使windows上的javaWEB项目公布到Centos上
首先在windows上把项目导入到myeclipse或者eclipse(JEE)版本号上. 然后经过调试,没有错误后. 点击项目,然后右键导出(Export...) 然后选择JEE的war格式,这个是 ...
- Share Your Knowledge and Experiences
 Share Your Knowledge and Experiences Paul W. Homer FRoM All oF ouR ExpERiEnCES, including both suc ...
- POJ--1087--A Plug for UNIX【Dinic】网络最大流
链接:http://poj.org/problem? id=1087 题意:提供n种插座.每种插座仅仅有一个,有m个设备须要使用插座,告诉你设备名称以及使用的插座类型,有k种转换器.能够把某种插座类型 ...
- 易语言VS杀毒软件:基情复燃,转受为攻!
这两天在编程领域里,又发生了一件令人瞩目的事情:以易语言创始人吴涛的一篇檄文<tid=370327">让我们一起来对360误报说不!>为序幕.再次拉开了易语言跟360杀毒软 ...
- [SCOI 2009] 生日快乐
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1024 [算法] 直接DFS,即可 [代码] #include<bits/std ...