[noi110]翘课
发现加边操作不好处理,因此考虑先加完所有边后删边。
删去一对边x到y,如果两者中有一个不翘课显然没有意义,那么如果都翘课了那么就对他们进行判断,如果无法翘课就继续搜下去。
这样的时间复杂度看上去似乎是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 }
[noi110]翘课的更多相关文章
- NOI.ac 模拟赛20181103 排队 翘课 运气大战
题解 排队 20% 1≤n≤20,1≤x,hi≤201\le n\le 20, 1\le x,h_i\le 201≤n≤20,1≤x,hi≤20 随便暴力 50% 1≤n≤2000,1≤x,hi≤1 ...
- 我的编程开始(C)
一,前言 写完t-sql系列,想了想自己的编程之路,一直有个想法,把自己这两年所整理的编程知识拿出来和大家分享,本来写完t-sql是想写一些设计思想的,因为现在也是在学习和整理一些简单框架,经常泡在大 ...
- 《如何在大学里脱颖而出(How to Win at College)》读书笔记
<如何在大学里脱颖而出(How to Win at College)>读书笔记 图书简介 中文版: 英文版: 作者卡尔·纽波特(Cal Newport)于 2004 年6月以优等生荣誉学会 ...
- CTSC2016&&APIO2016滚粗记&&酱油记&&游记<del>(持续更新)</del>
挖一波坑 #include <cstdio> using namespace std; int main(){ puts("转载请注明出处:http://www.cnblogs. ...
- # 20145205《Java程序设计》第2周学习总结
教材学习内容总结 本章的学习内容主要是关于变量,在java编写中各个不同的变量定义,关于数字,根据范围不同所分的 -128~127的byte -32768~32767的short -214748364 ...
- 有一种感动叫ACM(记陈立杰在成都赛区开幕式上的讲话)
各位选手,各位教练,大家好,我是来自清华大学交叉信息学院的陈立杰,今天很荣幸站在这里代表全体参赛选手发言.对于我来说,这是我第一次正式参加ACM的比赛.不过我跟ACM之间的缘分,大概在很早的时候就已经 ...
- Good Bye ACM
——记于2015.11.9 合肥 合肥区域赛结束了,长舒一口气,这次终于能成功退役了,以后可以不被学弟们吊打了Y(^_^)Y. 这次的比赛让我不禁联想起去年的上海现场赛,出题者防AK防得太过分了,又是 ...
- OC 入门
OC 入门 关键词正确写法: Xcode 错误的写法: xcode iPhone 错误的写法:IPhone iOS 错误的写法:IOS OC 全称: Objective-C 错误的写法:Object- ...
- NOI WC2016滚粗记
Day-4 报到日,今年居然没有发包QAQ,中午到的,志愿者很热情,食堂吃不了(也有可能是吃不惯),空调打不热,有拖线板(好评),有wifi覆盖(虽然听说连上要看脸)(反正我是没连过,用的自己的流量) ...
随机推荐
- 无服务计算应用场景探讨及 FaaS 应用实战
作者 | 宋文龙(闻可) 阿里云全球技术服务部高级交付专家 什么是无服务计算 无服务器计算(Serverless Computing)在构建和运行应用时无需管理服务器等基础设施.它描述了一个细粒度的 ...
- 第21篇-加载与存储指令之iload、_fast_iload等(3)
iload会将int类型的本地变量推送至栈顶.模板定义如下: def(Bytecodes::_iload , ubcp|____|clvm|____, vtos, itos, iload , _ ); ...
- 《手把手教你》系列技巧篇(三十一)-java+ selenium自动化测试- Actions的相关操作-番外篇(详解教程)
1.简介 上一篇中,宏哥说的宏哥在最后提到网站的反爬虫机制,那么宏哥在自己本地做一个网页,没有那个反爬虫的机制,谷歌浏览器是不是就可以验证成功了,宏哥就想验证一下自己想法,于是写了这一篇文章,另外也是 ...
- Windows 10下CUDA及cuDNN的安装 —— Pytorch
Windows 10下CUDA及cuDNN的安装 CUDA简介与下载地址 CUDA(ComputeUnified Device Architecture),是显卡厂商NVIDIA推出的运算平台. CU ...
- 分布式表示(Distributed Representation)
NLP模型笔记 - 分布式表示 ziuno 2020-03-08 19:52:50 410 收藏 2 分类专栏: NLP 模型 笔记 文章标签: nlp 最后发布:2020-03-08 19:52:5 ...
- 第四次Scrum Metting
日期:2021年4月29日 会议主要内容概述:交代近两日工作,进一步细化上次讨论细节,代码合并. 一.进度情况## 组员 负责 两日内已完成的工作 后两日计划完成的工作 工作中遇到的困难 徐宇龙 后端 ...
- PM技术分享——《构建之法》初步实践
软件理论 软件=程序+软件工程:软件开发活动(构建管理.源代码管理.软件设计.软件测试.项目管理)相关的内容的完成,才能完成把整个程序转化成为一个可用的软件的过程. 软件企业=软件+商业模式 软件开发 ...
- [软工作业]-软件案例分析-CSDN
[软工作业]-软件案例分析-CSDN(app) 项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 个人博客作业-软件案例分析 我在这个课程的目标是 ...
- GitHub README文件生成目录导航
效果 环境说明 [root@C61 ~]# cat /etc/redhat-release CentOS release 6.10 (Final) [root@C61 ~]# uname -a Lin ...
- Vagrant 搭建开发环境实践
介绍 Development Environments Made Easy -官网标题 vagrant是一个命令行的虚拟机管理程序.用于简化搭建开发环境. vagrant使用ruby语言基于Chef ...