cf1037E】的更多相关文章

题目链接 CF1037E. Trips 题解 每次删点后,对不满足要求的点拓扑 代码 #include<map> #include<queue> #include<vector> #include<cstdio> #include<algorithm> #define rep(a,b,c) for(int a = b;a <= c;++ a) #define gc getchar() #define pc putchar inline in…
题意 题目链接 Sol 倒着考虑!倒着考虑!倒着考虑! 显然,一个能成为答案的子图一定满足,其中任意节点的度数\(>= k\) 那么倒着维护就只用考虑删除操作,如果一个点不合法的话就把它删掉,然后考虑与他相邻的点 如果不合法就继续删 #include<bits/stdc++.h> #define Pair pair<int, int> #define MP make_pair #define fi first #define se second using namespace…
题目大意:一共有n个人,每天早上会有两个人成为朋友,朋友关系不具有传递性,晚上,它们会组织旅游,如果一个人去旅游,那么他不少于$k$个朋友也要和他去旅游,求每天的最大旅游人数 一开始并没有想到反向建图,并查集搞了好久也没出解,看了题解的思路,大概是这样的 转化问题,反向建图,把正序往图里建边换成每次倒序在图里删边. 显然,一开始/删掉边之后,度小于K的点一定不可用,那么把它删掉,和它相连的边也删掉 那么可能这个点删掉以后,和它相连的某个点度也小于K了,再把那个点也删掉...发现这是一个类似于拓扑…
看了题解又调了很久,用set来维护当前满足条件的pair<degree[v],v> 离线操作,先建好一张图,然后建立好集合,每次删边后都把集合里不满足条件的点删去,同时更新集合 /* 离线操作 */ #include<bits/stdc++.h> #include<vector> using namespace std; #define maxn 200005 vector<int>G[maxn]; int n,m,degree[maxn],k; set&l…
题解:考虑逆序处理询问,用一个set来维护能去的人,每次减少边的时候,维护一下这个set就可以,具体看代码 int main(){ int n, m, k; cin >> n >> m >> k; vector<pair<int, int> > Edges(m); vector<int> Ans(m); vector<int> degree(n,0); vector<vector<pair<int, in…
CF 板刷总结 这件事的开始要从万圣节那一天说起.当然,万圣节只用于描述时间,我显然是不参加任何万圣节活动的对吧. 以下是一些我觉得有必要拿出来讲的,有技术含量的题.会持续更新,断更了记得来催更. CF1037E 有一个 \(n\) 个点 \(m\) 条边的图,每次删掉一条边,然后问你最多能选出多少个点,使得这些点的 导出子图 中每个点度数都 \(\ge k\). 如果一个点度数 \(< k\),它显然可以被删除:它不可能再变得 \(\ge k\) 了.然后用类似拓扑排序的思路:先把度数 \(<…