Codeforces Manthan, Codefest 18 (rated, Div. 1 + Div. 2) E.Trips
比赛的时候想到怎么做了 没调出来(感觉自己是个睿智)
给你N个点M条边,这M条边是一条一条加进去的 要求你求出加入每一条边时图中极大'K度'子图的大小
极大'K度'子图的意思是 要求出一个有尽量多的点的子图 该图中每个点的度数至少为K
因为他每加一条边只会影响到两个点的度数 所以很明显下一个极大'K度'子图是在上一个的基础上得来的
所以如果我们知道在最早哪一步加入边时 产生了极大'K度'子图的话 我们就可以对每条边进行判定得出答案
但是如果每一步都判是否有极大'K度'子图 肯定会超时 该题是离线询问 所以可以考虑倒着做
先把M条边全部加进去 再拓扑排序 每次POP出一个度数小于K的节点 在图中删掉他所连的边 直至队列为空
得出了ans[M] 我们倒着枚举处理每条边即可
/*Huyyt*/
#include<bits/stdc++.h>
#define mem(a,b) memset(a,b,sizeof(a))
#define pb push_back
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
using namespace std;
vector<int> tree[];
pair<int, int> edge[];
int ans[];
int du[];
queue<int> que;
bool vis[];
map<pair<int, int>, int> mp;
int main()
{
ios_base::sync_with_stdio();
cin.tie(); int n, m, k;
int u, v;
cin >> n >> m >> k;
for (int i = ; i <= m; i++)
{
cin >> u >> v;
edge[i].first = u, edge[i].second = v;
du[v]++, du[u]++;
tree[u].pb(v), tree[v].pb(u);
}
for (int i = ; i <= n; i++)
{
if (du[i] < k)
{
que.push(i);
vis[i] = true;
}
}
while (que.size())
{
int now = que.front();
que.pop();
for (auto v : tree[now])
{
if (mp[make_pair(now, v)])
{
continue;
}
du[v]--;
mp[make_pair(now, v)] = mp[make_pair(v, now)] = ;
if (du[v] < k && (!vis[v]))
{
vis[v] = true;
que.push(v);
}
}
}
for (int i = ; i <= n; i++)
{
if (!vis[i])
{
ans[m]++;
}
}
for (int i = m - ; i >= ; i--)
{
ans[i] = ans[i + ];
u = edge[i + ].first, v = edge[i + ].second;
if (mp[make_pair(u, v)])
{
continue;
}
du[u]--, du[v]--;
mp[make_pair(u, v)] = mp[make_pair(v, u)] = ;
if (du[u] < k && (!vis[u]))
{
vis[u] = true;
que.push(u);
ans[i]--;
}
if (du[v] < k && (!vis[v]))
{
vis[v] = true;
que.push(v);
ans[i]--;
}
while (que.size())
{
int now = que.front();
que.pop();
for (auto v : tree[now])
{
if (mp[make_pair(now, v)])
{
continue;
}
du[v]--;
mp[make_pair(now, v)] = mp[make_pair(v, now)] = ;
if (du[v] < k && (!vis[v]))
{
ans[i]--;
vis[v] = true;
que.push(v);
}
}
}
}
for (int i = ; i <= m; i++)
{
cout << ans[i] << endl;
}
return ;
}
//E.Trips
Codeforces Manthan, Codefest 18 (rated, Div. 1 + Div. 2) E.Trips的更多相关文章
- 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 ...
- 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 ...
- Manthan, Codefest 18 (rated, Div. 1 + Div. 2) E bfs + 离线处理
https://codeforces.com/contest/1037/problem/E 题意 有n个人,m天,在第i天早上,x和y会成为朋友,每天晚上大家都要上车,假如一个人要上车那么他得有至少k ...
- 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 ...
- 题解——CF Manthan, Codefest 18 (rated, Div. 1 + Div. 2) T5(思维)
还是dfs? 好像自己写的有锅 过不去 看了题解修改了才过qwq #include <cstdio> #include <algorithm> #include <cst ...
- 题解——CF Manthan, Codefest 18 (rated, Div. 1 + Div. 2) T4(模拟)
随便模拟下就过了qwq 然后忘了特判WA了QwQ #include <cstdio> #include <algorithm> #include <cstring> ...
- 题解——CF Manthan, Codefest 18 (rated, Div. 1 + Div. 2) T3(贪心)
是一道水题 虽然看起来像是DP,但其实是贪心 扫一遍就A了 QwQ #include <cstdio> #include <algorithm> #include <cs ...
- 题解——CF Manthan, Codefest 18 (rated, Div. 1 + Div. 2) T2(模拟)
题目要求很简单,做法很粗暴 直接扫一遍即可 注意结果会爆int #include <cstdio> #include <algorithm> #include <cstr ...
- 题解——CF Manthan, Codefest 18 (rated, Div. 1 + Div. 2) T1(找规律)
就是找一下规律 但是奈何昨天晚上脑子抽 推错了一项QwQ 然后重新一想 A掉了QwQ #include <cstdio> #include <algorithm> #inclu ...
随机推荐
- vue中局部封装axios
Vue中局部配置axios 'use strict' import axios from 'axios'; import { Loading } from 'element-ui'; export c ...
- linux系统查看当前正在运行的服务
--查看当前服务器所有服务 service --status-all -- 查看当前所有正在运行的服务 service --status-all | grep running --查看指定服务运行状态 ...
- 强化学习应用于游戏Tic-Tac-Toe
Tic-Tac-Toe游戏为3*3格子里轮流下棋,一方先有3子成直线的为赢家. 参考代码如下,我只删除了几个没用的地方: ####################################### ...
- python基础之字典dict
不可变数据类型:tuple.bool.int.str --可哈希类型可变数据类型:list.dict.set --不可哈希类型dict-key 必须是不可变数据类型,可哈希dict-value 任意数 ...
- SQL Injection(Blind)
SQL Injection(Blind),即SQL盲注,与一般注入的区别在于,一般的注入攻击者可以直接从页面上看到注入语句的执行结果,而盲注时攻击者通常是无法从显示页面上获取执行结果,甚至连注入语句是 ...
- springcloud zookeeper+gateway
搭建springcloud项目的时候以 zookeeper为注册中心 gateway为路由 启动时出现以下报错: ****************************************** ...
- C++学习笔记-运算符重载
运算符重载使得用户自定义的数据以一种更简洁的方式工作 运算符重载规则 重载运算符的限制 可以重载的运算符 + - * / % ^ & | ~ ! = < > += -= *= /= ...
- 数据库 ----jdbc连接池的弊端
jdbc连接池的弊端 1.数据库连接,使用时就创建,不使用立即释放,对数据库进行频繁连接开启和关闭,造成数据库资源浪费,影响 数据库性能.设想:使用数据库连接池管理数据库连接.2.将sql语句硬编码到 ...
- Go语言中的切片(十)
go中数组的长度是固定的,且不同长度的数组是不同类型,这样的限制带来不少局限性.于是切片就来了,切片(Slice)是一个拥有相同类型元素的可变长度的序列.它是基于数组类型做的一层封装.它非常灵活,支持 ...
- Android layout_marginBottom无效
layout_marginBottom属性无效的原因可能是顶部没有View组件(进行相对绘制)