当前位置: 首页 > news >正文

题解:CF1037E Trips

题意

一共有 \(n\) 个人,他们开始互不认识,而每天早上不认识的两个人会变成朋友。一共有 \(m\) 天,每天晚上有的人要去旅行,去旅行的人必须满足有至少 \(k\) 个朋友也去旅行。求每天去旅行的最大人数。

思路

  • 读题后发现,想要判断一个人能否去旅行,就要知道他的朋友能否旅行。这是一个“套娃”的判断,如果直接考虑有多少人能去旅行较为困难。

  • 因此,我们可以考虑有多少人不能去旅行。首先,那些朋友数量不足 \(k\) 个的肯定不行,将他删去。删去后我们发现,他的一些朋友此时朋友数量变小后不足 \(k\) 个,则将他们也删去,以此类推,就可以统计出一个固定的图中有多少人不能旅行,单次统计时间复杂度 \(O(n)\)

  • 接下来考虑加边。如果在每个时刻都进行一次上述操作,则总体时间复杂度为 \(O(nm)\),会超时。但正难则反,我们可以变加边为删边,从最后一个时刻向前计算,每次删除图中的一条边。删边后,有些人朋友数量小于 \(k\),则将他们删去,再考虑他们的朋友,以此类推。总体时间复杂度 \(O(n+m)\)

  • 实现时有一些细节,如一条边删去后要标记两条边被删去(因为是无向图),防止重复删边。还有只有在某个点的度数减小后恰好等于 \(k - 1\) 才能删去,防止重复删点。

代码

#include<bits/stdc++.h>
#define int long long
#define MAXN 400005
using namespace std;
int n,m,k,ans[MAXN],eu[MAXN],ev[MAXN],d[MAXN],sum;
int cnt,head[MAXN];
queue<int>q;
struct Edge{int value,next,w;
}adj[MAXN];
void addedge(int u,int v){adj[++cnt].value=v;adj[cnt].next=head[u];adj[cnt].w=1;		//标记该边未被删除 head[u]=cnt;
}
void solve(){while(!q.empty()){int x=q.front();q.pop();for(int i=head[x];i;i=adj[i].next){if(adj[i].w==1){int y=adj[i].value;d[y]--;if(d[y]==k-1){	//新出现的不符合要求的点入队 q.push(y);sum--;}adj[i].w=0;					adj[(i%2==0?i-1:i+1)].w=0;//标记该边已被删除 }}}
}
signed main(){scanf("%lld%lld%lld",&n,&m,&k);for(int i=1;i<=m;i++){scanf("%lld%lld",&eu[i],&ev[i]);addedge(eu[i],ev[i]);addedge(ev[i],eu[i]);d[eu[i]]++;d[ev[i]]++;}sum=n;for(int i=1;i<=n;i++){if(d[i]<k){		//本来度数不足k个的点入队 q.push(i);sum--;}}for(int i=m;i;i--){solve();ans[i]=sum;if(adj[i*2].w==1&&adj[i*2-1].w==1){//若该边还没有被删除 d[eu[i]]--;if(d[eu[i]]==k-1)q.push(eu[i]),sum--;//删边后若有点不符合要求则加入队列 d[ev[i]]--;if(d[ev[i]]==k-1)q.push(ev[i]),sum--;adj[i*2].w=0;adj[i*2-1].w=0;}}for(int i=1;i<=m;i++){printf("%lld\n",ans[i]);}return 0;
}
http://www.zskr.cn/news/37901.html

相关文章:

  • 题解:CF387E George and Cards
  • 题解:CF712D Memory and Scores
  • 拾壹月贰
  • [题解]CSP-S 2025 T1~T3 题解
  • CSP-S游记
  • NOIP 2025 游记 退役记
  • 一个万古常青的、小而美的输入法
  • 条件表达式中的赋值问题
  • Jenkins-CICD项目自动化部署
  • 第k小的数的分治算法
  • 一个灵感:思维的断章
  • 10.30总结
  • 世界计划:无法歌唱的初音未来
  • 一、RK3562板卡上手
  • 2025 年 11 月数控激光去毛刺机,冲压件去毛刺机,精密去毛刺机厂家最新推荐,实力品牌深度解析采购无忧之选!
  • AT ARC156C Tree and LCS 题解
  • CSPT漏洞浅析
  • Awesome Neovim - 精选Neovim插件大全
  • 不会AI编程?没关系!这几个框架也让你也能开发AI聊天助手!
  • 别只怪客户端宕机!还有这些导致 Redis 分布式锁“死锁”的原因 - 公众号
  • 第13天(中等题 滑动窗口)
  • 我重生了,重生到了CSP前——高中物理电学速通
  • 第二章算法作业
  • Linux模板机优化实操
  • 渗透知识靶场实战
  • 游记 CSP-S2025
  • 2025 年 11 月 CBN 砂轮厂家最新推荐:结合剂迭代 + 精度优化,高耐用产品选购指南
  • 2025 年 11 月 CBN 砂轮厂家最新推荐:磨料优化 + 工艺升级,高适配产品选购指南
  • 2025 年 11 月运动木地板厂家最新推荐,配方精研与效能焕新!—— 实力品牌深度解析采购无忧之选!
  • 【软考】信安中级密码学专题