Codeforces 553D Nudist Beach(图论,贪心)
Solution:
假设已经选了所有的点。
如果从中删掉一个点,那么其它所有点的分值只可能减少或者不变。
如果要使若干步删除后最小的分值变大,那么删掉的点集中肯定要包含当前分值最小的点。
所以每次删掉一个点都记录一次最大值。取最大的情况输出就好。
#include <bits/stdc++.h>
using namespace std; const int N = ; vector<int> E[N], out;
set<pair<double, int>> s;
int deg[N], vis[N], dg[N];
int n, m, k; int main()
{
ios::sync_with_stdio ( );
cin >> n >> m >> k; for ( int i = , x; i <= k; ++i ) {
cin >> x;
vis[x] = ;
} for ( int i = , u, v; i <= m; ++i ) {
cin >> u >> v;
E[u].push_back ( v ), ++deg[u];
if ( !vis[v] ) ++dg[u];
E[v].push_back ( u ), ++deg[v];
if ( !vis[u] ) ++dg[v];
} for ( int i = ; i <= n; ++i ) {
if (!vis[i])
s.insert ( make_pair ( .*dg[i] / deg[i], i ) );
} double ans = -;
while (!s.empty() ) {
auto it = *s.begin();
if (it.first > ans) {
ans=it.first;
out.clear();
for (auto &i : s) {
out.push_back (i.second);
}
}
s.erase (s.begin() );
vis[it.second] = ;
for (auto &i : E[it.second]) {
if (!vis[i]) {
s.erase (make_pair (.*dg[i] / deg[i], i) );
--dg[i];
s.insert (make_pair (.*dg[i] / deg[i], i) );
}
}
} cout << out.size() << endl;
for (auto &i : out) {
cout << i << " ";
}
}
Codeforces 553D Nudist Beach(图论,贪心)的更多相关文章
- Codeforces 553D Nudist Beach(二分答案 + BFS)
题目链接 Nudist Beach 来源 Codeforces Round #309 (Div. 1) Problem D 题目大意: 给定一篇森林(共$n$个点),你可以在$n$个点中选择若干个构 ...
- codeforces 553D . Nudist Beach 二分
题目链接 有趣的题. 给一个图, n个点m条边. 有k个点不可选择. 现在让你选出一个非空的点集, 使得点集中strength最小的点的strength最大. strength的定义:一个点周围的点中 ...
- codeforces 553 D Nudist Beach
题意大概是.给出一个图,保证每一个点至少有一条边以及随意两点间最多一条边.非常显然这个图有众多点集,若我们给每一个点定义一个权值,那每一个点集都有一个最小权值点,如今要求出一个点集,这个点集的最小权值 ...
- codeforces Gym 100338E Numbers (贪心,实现)
题目:http://codeforces.com/gym/100338/attachments 贪心,每次枚举10的i次幂,除k后取余数r在用k-r补在10的幂上作为候选答案. #include< ...
- [Codeforces 1214A]Optimal Currency Exchange(贪心)
[Codeforces 1214A]Optimal Currency Exchange(贪心) 题面 题面较长,略 分析 这个A题稍微有点思维难度,比赛的时候被孙了一下 贪心的思路是,我们换面值越小的 ...
- Ant Man CodeForces - 704B (图论,贪心)
大意: 给N个点,起点S终点T,每个点有X,A,B,C,D,根据I和J的X坐标可得I到J的距离计算公式 |xi - xj| + ci + bj seconds if j< i |xi - xj| ...
- codeforces 349B Color the Fence 贪心,思维
1.codeforces 349B Color the Fence 2.链接:http://codeforces.com/problemset/problem/349/B 3.总结: 刷栅栏.1 ...
- Codeforces Gym 100269E Energy Tycoon 贪心
题目链接:http://codeforces.com/gym/100269/attachments 题意: 有长度为n个格子,你有两种操作,1是放一个长度为1的东西上去,2是放一个长度为2的东西上去 ...
- CodeForces 797C Minimal string:贪心+模拟
题目链接:http://codeforces.com/problemset/problem/797/C 题意: 给你一个非空字符串s,空字符串t和u.有两种操作:(1)把s的首字符取出并添加到t的末尾 ...
随机推荐
- Enter键提交表单
input type="submit"在360浏览器上不能提交 用了这个 <input type="button" class="btn b ...
- java基础(十八)IO流(一)
这里有我之前上课总结的一些知识点以及代码大部分是老师讲的笔记 个人认为是非常好的,,也是比较经典的内容,真诚的希望这些对于那些想学习的人有所帮助! 由于代码是分模块的上传非常的不便.也比较多,讲的也是 ...
- rails第一次做项目
最近这几天一直都是在做rails的入门,也就是熟悉rails的增.删.改.查操作,做到rails的入门.这几天的熟悉,只是对于操作的熟悉,对于rails语言的机制还有很多不是很熟悉.昨天接手第一个真正 ...
- Xcode插件筛选
Xcode高效插件推荐 好像很多iOS开发的同学都不知道Xcode有插件这么一说,所以整理了一下自己用的Xcode高效插件,分享给大家 下列插件在Xcode 7.0.1 版本做测试通过可以使用 在Xc ...
- 转载:在Ubuntu系统下装Win7并引导双系统
转载自http://blog.sina.com.cn/s/blog_9f6451990101blef.html 本人的系统原先是就单ubuntu系统,而且是未分区情况下自动安装的,现在又装了个wind ...
- HW4.26
public class Solution { public static void main(String[] args) { double sum; double item; for(int i ...
- Android studio开发常用快捷键
最常用快捷键 1.Ctrl+E 可以显示最近编辑的文件列表 2.Shift+Click(点击) 可以关闭文件 3.Ctrl+[或者ctrl+] 可以跳到大括号的开头结尾 4.Ctrl+Shift ...
- FairScheduler的任务调度机制——assignTasks(续)
上一篇文章浅析了FairScheduler的assignTasks()方法,介绍了FairScheduler任务调度的原理.略过了最后一步通过JobScheduler获取Task时调用JobInPro ...
- web dynpro message(备忘用)
DATA lo_api_controller TYPE REF TO if_wd_controller. DATA lo_message_manager TYPE REF TO if_wd_messa ...
- (linux shell)第一章--小试牛刀(上)
来源:(linux shell)第一章--小试牛刀(上) 从今天開始,我们一起来学习<linux shell脚本攻略>这本书. 1.1简单介绍 shell脚本一般是一个以#!起始的文本文件 ...