题目链接:1037E - Trips

题目大意:有n个人,m天,每天晚上都会有一次聚会,一个人会参加一场聚会当且仅当聚会里有至少k个人是他的朋友。每天早上都会有一对人成为好朋友,问每天晚上最多能有多少人参加聚会。朋友关系不满足传递性。

   相当于有n个点,进行m次加边操作,每次操作后附加一个询问,问最大点集的大小,使得点集中每个点的度数均大于等于k

题解:如果直接边加边询问可能比较麻烦,本着“正难则反”的原则,我们可以将题目转化为,初始有m条边,每次操作是先询问当前的答案,再删去一条边。

   现在我们就可以先考虑,如果给你m条边,问对应的答案是多少,如何求解。这里给出一个定义,称一个人(点)为无用的,当且仅当没有人会因为他参加了聚会而参加聚会,否则称这个人是有用的。对于朋友关系(边)同理,当且仅当没有人会因此朋友关系而加入聚会,这条边才被称为无用

   显然,一个度数小于k的点肯定是无用的,因为他的朋友不到k个,肯定不会去聚会,更不会有人因为他去聚会。接下来我们可以发现,这个点连出去的边也肯定是无用的,理由同上。那既然这些边是无用的了,我们就可以将这些边删去,对应的一些点的度数就会减少,就可能会产生新的“无用点”,这时候我们就要再将这些点以及有连接到这些点的边删去,直至剩下的所有点和边都是有用的。此时,将剩下的这些点全部拿去参加聚会肯定是满足条件的,因此答案就是剩下的点的个数。

   接下来考虑删边的情况,每次删边前先检索这条边是否还存在(即是否还是有用的),如果他已经被当做无用边删除了,则这次操作不会对答案产生影响,继续进行下一次操作。如果这条边还是有用的,则删去这条边,如果删去这条边导致了新的无用点的产生(即出现了度数小于k的点),则删除此点和相关的边,操作方法和预处理时一致。这样做m次之后再输出答案就好了。

代码中s表示有用点的集合,d[i]记录与i相连的有用边的终点的集合

#include<bits/stdc++.h>
using namespace std;
#define N 200001
int n,m,k,x[N],y[N],ans[N];
set<int>d[N],s;
queue<int>q;
int main()
{
scanf("%d%d%d",&n,&m,&k);
for(int i=;i<=m;i++)
scanf("%d%d",&x[i],&y[i]),
d[x[i]].insert(y[i]),
d[y[i]].insert(x[i]);
for(int i=;i<=n;i++)
if(d[i].size()<k)
q.push(i);
while(!q.empty())
{
int cur=q.front();q.pop();
for(auto nxt:d[cur])
{
d[nxt].erase(cur);
if(d[nxt].size()<k)
q.push(nxt);
}
d[cur].clear();
}
for(int i=;i<=n;i++)
if(d[i].size()>=k)s.insert(i);
for(int i=m;i>=;i--)
{
ans[i]=s.size();
if(d[x[i]].count(y[i]))
{
d[x[i]].erase(y[i]);
d[y[i]].erase(x[i]);
if(d[x[i]].size()<k)
q.push(x[i]);
if(d[y[i]].size()<k)
q.push(y[i]);
}
while(!q.empty())
{
int cur=q.front();q.pop();
for(auto nxt:d[cur])
{
d[nxt].erase(cur);
if(d[nxt].size()<k)
q.push(nxt);
}
d[cur].clear(),s.erase(cur);
}
}
for(int i=;i<=m;i++)printf("%d\n",ans[i]);
}

[Manthan, Codefest 18][Codeforces 1037E. Trips]的更多相关文章

  1. [Manthan, Codefest 18][Codeforces 1037F. Maximum Reduction]

    题目链接:1037F - Maximum Reduction 题目大意:给出一段代码,给你一个长度为n的数组和数字k,求程序运行结果,mod 1e9+7输出 简单翻译下代码的意思,初始定义一个空数组b ...

  2. Codeforces Manthan, Codefest 18 (rated, Div. 1 + Div. 2) E.Trips

    比赛的时候想到怎么做了 没调出来(感觉自己是个睿智) 给你N个点M条边,这M条边是一条一条加进去的 要求你求出加入每一条边时图中极大'K度'子图的大小 极大'K度'子图的意思是 要求出一个有尽量多的点 ...

  3. Codeforces Manthan, Codefest 18 (rated, Div. 1 + Div. 2) D,E

    D. Valid BFS? time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...

  4. Manthan, Codefest 18 (Div 1 + Div 2) (A~E)

    目录 Codeforces 1037 A.Packets B.Reach Median C.Equalize D.Valid BFS E.Trips(正难则反) Codeforces 1037 比赛链 ...

  5. Manthan, Codefest 18 (rated, Div. 1 + Div. 2) F 单调栈 + 贡献 + 计数

    https://codeforces.com/contest/1037/problem/F 题意 function z(array a, integer k): if length(a) < k ...

  6. Manthan, Codefest 18 (rated, Div. 1 + Div. 2) E bfs + 离线处理

    https://codeforces.com/contest/1037/problem/E 题意 有n个人,m天,在第i天早上,x和y会成为朋友,每天晚上大家都要上车,假如一个人要上车那么他得有至少k ...

  7. Codeforces 1037E Trips

    原题 题目大意: 有\(n\)个人,起初他们都不是朋友.总共有\(m\)天,每天会有两个人成为朋友.他们计划在晚上出去旅游,对于一个人,有如下两种情况: 1.要么他不出去旅游 2.要么有至少\(k\) ...

  8. Manthan, Codefest 18 (rated, Div. 1 + Div. 2) C D

    C - Equalize #include<bits/stdc++.h> using namespace std; using namespace std; string a,b; int ...

  9. 题解——CF Manthan, Codefest 18 (rated, Div. 1 + Div. 2) T5(思维)

    还是dfs? 好像自己写的有锅 过不去 看了题解修改了才过qwq #include <cstdio> #include <algorithm> #include <cst ...

随机推荐

  1. java 规则引擎资料汇集

    1. ibm的developworks中较早的一篇关于规则引擎的文章 https://www.ibm.com/developerworks/cn/java/j-java-rules/ 2. 一篇硕士论 ...

  2. iOS10 11跳转系统设置等的URL收集

    Settings App-Prefs:root Settings -> About App-Prefs:root=General&path=About Settings -> Ac ...

  3. Java全栈程序员之07:IDEA中使用MAVEN构架生产级的Web项目

    在上一篇我们介绍了如何在IDEA中使用MAVEN,以及如何创建依赖等.那么在这一篇中,我们就试图搭建一个生产级的解决方案,大家可以使用这个解决方案作为骨架代码来搭建自己的开发环境. 在这里,我们要完成 ...

  4. java AOP Before, After, AfterReturning, AfterThrowing, or Around 注解

    https://www.eclipse.org/aspectj/doc/next/adk15notebook/ataspectj-pcadvice.html Advice In this sectio ...

  5. java字符串的替换replace、replaceAll、replaceFirst的区别详解

    如果不是刚刚复习了下正则表达式,我可能也不会注意到,原来String的replaceAll跟replaceFirst用到了正则表达式! 不多解释,看代码: String s = "my.te ...

  6. mina websocket 粘包、断包、(丢包)解决心得

    被这3个(其实是2个)问题坑惨了,目前没发现存在丢包问题,之前认为的丢包问题事实是不存在的. 粘包和断包的情况是存在的,这两个问题不怕,只要发送接收到的数据包顺序没有被打乱颠倒,一切都好办. 容易掉的 ...

  7. css 定位(fixed > absolute > relative)与层级zIndex 的权限认知

    原则1: fixed > absolute > relative原则2: zIndex 越高越牛逼,不管你是谁无视身份.原则3: 青出于蓝而胜于蓝,儿子永远比父亲强原则4: 平台很重要. ...

  8. PHP 开发者的 Docker 之旅

    用 PHP 作为我们「Docker 开发大礼包」开篇是带着一些朝圣的心情的.这是一门堪称「古老」的语言,这也是一门争议最多的语言,这更是一门不断涅槃的语言.「PHP 是最好的语言」这个流传已久的梗,或 ...

  9. php生成毫秒时间戳的例子

    php时间函数time()生成当前时间的秒数,但是在一些情况下我们需要获取当前服务器时间和GMT(格林威治时间)1970年1月0时0分0秒的毫秒数,与Java中的currentTimeMilis()函 ...

  10. Atitti 互联网时代三大竞争战略 ——平台化战略 锚”战略、价值领先战略

    Atitti 互联网时代三大竞争战略 ——平台化战略 锚”战略.价值领先战略 美国著名管理学家迈克尔•波特在<竞争战略>一书中提出了集中化战略和差异化战略.成本领先战略三种基本竞争战略,从 ...