[题目链接]

http://codeforces.com/problemset/problem/1037/E

[算法]

首先离线 , 将问题倒过来考虑 , 转化为 : 每次删除一条边 , 此时最多有多少人参加旅行

假设所有点都选取 , 那么 ,如果一个点的度数 < k , 显然这个点不能选 , 我们需要删除它和所有与它相邻的边

显然 , 所有的点和边最多只会被删去一次 , 故时间复杂度为O(N + M)

[代码]

#include<bits/stdc++.h>
using namespace std;
const int MAXN = 2e5 + ; int n , m , k;
int deg[MAXN],res[MAXN],x[MAXN],y[MAXN],q[MAXN];
bool visited[MAXN],del[MAXN];
vector< int > a[MAXN],b[MAXN]; template <typename T> inline void chkmax(T &x,T y) { x = max(x,y); }
template <typename T> inline void chkmin(T &x,T y) { x = min(x,y); }
template <typename T> inline void read(T &x)
{
T f = ; x = ;
char c = getchar();
for (; !isdigit(c); c = getchar()) if (c == '-') f = -f;
for (; isdigit(c); c = getchar()) x = (x << ) + (x << ) + c - '';
x *= f;
}
int main()
{ read(n); read(m); read(k);
for (int i = ; i <= m; i++)
{
read(x[i]); read(y[i]);
a[x[i]].push_back(y[i]);
a[y[i]].push_back(x[i]);
b[x[i]].push_back(i);
b[y[i]].push_back(i);
deg[x[i]]++; deg[y[i]]++;
}
int l = , r = ,ans = n;
for (int i = ; i <= n; i++)
{
if (deg[i] < k)
{
visited[i] = true;
q[++r] = i;
ans--;
}
}
for (int i = m; i >= ; i--)
{
while (l <= r)
{
int u = q[l++];
for (unsigned j = ; j < a[u].size(); j++)
{
if (!del[b[u][j]])
{
deg[u]--;
deg[a[u][j]]--;
del[b[u][j]] = true;
if (!visited[a[u][j]] && deg[a[u][j]] < k)
{
ans--;
visited[a[u][j]] = true;
q[++r] = a[u][j]; }
}
}
}
res[i] = ans;
if (!del[i])
{
del[i] = true;
deg[x[i]]--;
deg[y[i]]--;
if (!visited[x[i]] && deg[x[i]] < k)
{
visited[x[i]] = true;
ans--;
q[++r] = x[i];
}
if (!visited[y[i]] && deg[y[i]] < k)
{
visited[y[i]] = true;
ans--;
q[++r] = y[i];
}
}
}
for (int i = ; i <= m; i++) printf("%d\n",res[i]); return ; }

[Codeforces 1037E] Trip的更多相关文章

  1. Codeforces A. Trip For Meal

    A. Trip For Meal time limit per test 1 second memory limit per test 512 megabytes input standard inp ...

  2. [Manthan, Codefest 18][Codeforces 1037E. Trips]

    题目链接:1037E - Trips 题目大意:有n个人,m天,每天晚上都会有一次聚会,一个人会参加一场聚会当且仅当聚会里有至少k个人是他的朋友.每天早上都会有一对人成为好朋友,问每天晚上最多能有多少 ...

  3. Codeforces 1037E Trips

    原题 题目大意: 有\(n\)个人,起初他们都不是朋友.总共有\(m\)天,每天会有两个人成为朋友.他们计划在晚上出去旅游,对于一个人,有如下两种情况: 1.要么他不出去旅游 2.要么有至少\(k\) ...

  4. Trips CodeForces - 1037E(思维dfs)

    题意: 就是几个人去旅游,组队的条件是对于某个队员 队里至少有两个是他的朋友,每天早晨都会有一对新人成为朋友 解析: 用set标记互为朋友 a[i] b[i] 表示在第i天早晨 u和v成为朋友 先求最 ...

  5. codeforces 1037E. Trips(倒叙)

    题目传送门: 解题思路: 正着搞好像有点恶心. 反着搞. 一边删一边搞,从崩坏的地方开始,入度--. 最后dfs崩坏,更新答案. 注意要把边删掉防止重复崩坏. 代码: #include<cstd ...

  6. Codeforces Round #396 (Div. 2) E. Mahmoud and a xor trip dfs 按位考虑

    E. Mahmoud and a xor trip 题目连接: http://codeforces.com/contest/766/problem/E Description Mahmoud and ...

  7. Codeforces 703B. Mishka and trip 模拟

    B. Mishka and trip time limit per test:1 second memory limit per test:256 megabytes input:standard i ...

  8. Codeforces Round #396 (Div. 2) E. Mahmoud and a xor trip

    地址:http://codeforces.com/contest/766/problem/E 题目: E. Mahmoud and a xor trip time limit per test 2 s ...

  9. Codeforces Round #365 (Div. 2) Mishka and trip

    Mishka and trip 题意: 有n个城市,第i个城市与第i+1个城市相连,他们边的权值等于i的美丽度*i+1的美丽度,有k个首都城市,一个首都城市与每个城市都相连,求所有边的权值. 题解: ...

随机推荐

  1. ceph集群

    ceph集群部署 ceph理解: Ceph是一个分布式存储,可以提供对象存储.块存储和文件存储,其中对象存储和块存储可以很好地和各大云平台集成.其他具体介绍可见官网简介:http://docs.cep ...

  2. JavaScript在HTML中的应用

    JavaScript在HTML中的应用 制作人:全心全意 在HTML文档中可以使用<script>...</script>标记将JavaScript脚本嵌入到其中,在HTML文 ...

  3. buf.indexOf()

    buf.indexOf(value[, byteOffset][, encoding]) value {String} | {Buffer} | {Number} byteOffset {Number ...

  4. 第二十二节:scrapy爬虫识别验证码(一)类库安装

    一.安装tesserocr 1.首先下载tesseract:https://digi.bib.uni-mannheim.de/tesseract/ ,我下载的是tesseract-ocr-setup- ...

  5. STL优先队列重载

    priority_queue默认是大根堆,如果需要使用小根堆,如下 int main(){ priority_queue<int,vector<int>,greater<int ...

  6. python之字典 2014-4-5

    #字典:当索引不好用时1.字典 类似于php的关联数组 列表类似于索引数组 2.创建字典 phonebook={'alice':'2100','tom':'1900'} 键值之间用: 项之间用, 空字 ...

  7. STM32F407 跑马灯 库函数版 个人笔记

    原理图: MCU在开发板原理图的第二页,LED在开发板原理图的第三页 由图可知,PF9 ,PF10 若输出低电平则灯亮,高电平则灯灭 选推挽输出 代码步骤 使能IO口时钟. 调用函数RCC_AHB1P ...

  8. C++——"%"运算符

    基本介绍 r=a%b,余数的取值范围为-b+1~b-1,符号与a一致 要想得到0~b-1的余数,可以用:(a%b+b)%b 数位拆解 方法一:反复的:%10,/10 sizea = 0; while ...

  9. BNUOJ 5235 Starship Troopers

    Starship Troopers Time Limit: 5000ms Memory Limit: 32768KB This problem will be judged on HDU. Origi ...

  10. Leetcode 207.课程表

    课程表 现在你总共有 n 门课需要选,记为 0 到 n-1. 在选修某些课程之前需要一些先修课程. 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0,1] 给定课程总 ...