[noi110]翘课

2023-11-10 17:50
文章标签 翘课 noi110

本文主要是介绍[noi110]翘课,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

发现加边操作不好处理,因此考虑先加完所有边后删边。

删去一对边xy,如果两者中有一个不翘课显然没有意义,那么如果都翘课了那么就对他们进行判断,如果无法翘课就继续搜下去。

这样的时间复杂度看上去似乎是o(nm)的,但注意到每一个点最多由翘课变为不翘课一次,因此是o(n+m)的。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 queue<int>q;
 4 struct ji{
 5     int nex,to;
 6 }edge[400001];
 7 int E,n,m,k,head[200001],x[200001],y[200001],d[200001],ans[200001];
 8 bool vis[200001],flag[400001];
 9 void add(int x,int y){
10     edge[E].nex=head[x];
11     edge[E].to=y;
12     head[x]=E++;
13 }
14 void pus(int t){
15     if (d[t]<k){
16         q.push(t);
17         ans[0]-=(vis[t]=1);
18     } 
19 }
20 void erase(){
21     while (!q.empty()){
22         int k=q.front();
23         q.pop();
24         for(int i=head[k];i!=-1;i=edge[i].nex)
25             if ((!vis[edge[i].to])&&(!flag[i])){
26                 flag[i]=flag[i^1]=1;
27                 d[edge[i].to]--;
28                 pus(edge[i].to);
29             } 
30     }
31 }
32 int main(){
33     memset(head,-1,sizeof(head));
34     scanf("%d%d%d",&n,&m,&k);
35     for(int i=1;i<=m;i++){
36         scanf("%d%d",&x[i],&y[i]);
37         add(x[i],y[i]);
38         add(y[i],x[i]);
39         d[x[i]]++;
40         d[y[i]]++;
41     }
42     ans[0]=n;
43     for(int i=1;i<=n;i++)pus(i);
44     for(int i=m;i;i--){
45         erase();
46         ans[i]=ans[0];
47         if (vis[x[i]]+vis[y[i]]==0){
48             d[x[i]]--;
49             d[y[i]]--;
50         }
51         flag[i*2-1]=flag[i*2-2]=1;
52         if (!vis[x[i]])pus(x[i]);
53         if (!vis[y[i]])pus(y[i]);
54     }
55     for(int i=1;i<=m;i++)printf("%d\n",ans[i]);
56 } 
View Code

 

转载于:https://www.cnblogs.com/PYWBKTDA/p/11272291.html

这篇关于[noi110]翘课的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/384300

相关文章

翘课被发现?C++老师如何通过“常函数”发现我没上课?

文章目录 知识点一、使用sort函数对自定义类进行排序解读代码实现 知识点二、常对象只能调用常函数       这学期C++课的上机实验一共问了老师两次问题,而这两次都是早上睡懒觉睡过了没听课,漏掉了重要的知识点。结果两次问老师之后老师的回答是,“我怀疑你今天没来上课”,“你今天肯定没来上课”,甚至当我想敷衍过去的时候,老师再来追问我“是不是没来?”,实在是太尴尬了 ~ o ~