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 ...
随机推荐
- WebJars简介
https://www.cnblogs.com/liaojie970/p/7852576.html https://blog.csdn.net/eff666/article/details/70183 ...
- JavaScript基础之数组常用方法
目录 JS 数组常用API 常用属性 常用方法 常见方法语法解释 from方法 isArray concat every fill filter find forEach indexOf join k ...
- C#编程 socket编程之TcpClient,TcpListener,UdpClient
应用程序可以通过 TCPClient.TCPListener 和 UDPClient 类使用传输控制协议 (TCP) 和用户数据文报协议 (UDP) 服务.这些协议类建立在 System.Net.So ...
- PJzhang:ping命令的基本用法
猫宁!!! 参考链接:https://www.cnblogs.com/diantong/p/9626751.html http://aiezu.com/article/linux_ping_comma ...
- 致远OA利用POC
批量检测url 在脚本同目录下建立url.txt 放入待检测的URL 运行脚本 # Wednesday, 26 June 2019 # Author:nianhua # Blog:https://gi ...
- webdriervAPI(XPath元素定位)
from selenium import webdriver driver = webdriver.Chorme() driver.get("http://www.baidu.co ...
- python copy与deepcopy (拷贝与深拷贝)
copy与deepcopy python 中的copy与deepcopy是内存数据的操作,但是两个函数有一定的区别. 1.copy import copy list = [1, [4, 5, 6], ...
- [转帖]IBM收购红帽价格是多少?是否会形成垄断企业?会存在什么不安因素?
http://www.techweb.com.cn/it/2019-07-10/2743776.shtml 国产的linux 用centos源的 如何是好呢.. 蓝色巨人IBM官方宣布,已经正式完成对 ...
- [转帖]忘记了MariaDB root密码的解决办法
忘记了MariaDB root密码的解决办法 https://www.cnblogs.com/liaojie970/p/6126322.html 貌似跟 mysql 是一样的. 1.停掉mariaDB ...
- Linux系统下部署Tomcat服务器
详细步骤如下: 1.下载xshell5和xftp5并安装,登录连接服务器,新建会话窗口: 2.安装配置JDK1.8,具体操作方法如下: (1)下载JDK地址:http://www.oracle.com ...