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 << " ";
}
}

最新文章

  1. JavaBean知识
  2. C# 创建Windows Service
  3. 系统表达式(z变换、DTFT、差分方程)之间的关系
  4. CORTEX -M3 : Registers in depth
  5. codeforces 677C C. Vanya and Label(组合数学+快速幂)
  6. HTML5 声明兼容IE的写法
  7. django随笔说明
  8. 经典HTML5小游戏 支持各种浏览器 (围住神经猫)
  9. MacBook IDEA激活码(附视频)
  10. 四:(之四)基于已有镜像构建自己的Docker镜像
  11. 创建自己的共用js库
  12. python自学——文件打开
  13. pom.xml 配置maven私服
  14. FW Windows下DOS命令大全(经典收藏)---mklink
  15. C#线程访问winform窗体控件
  16. socket 请求接收完整的一个http响应(设置recv 接收超时选项SO_RCVTIMEO)
  17. 【同步时间】Linux设置时间同步
  18. [转载]hazard pointer
  19. android 显示internet 图片
  20. ubuntu网速慢解决方法

热门文章

  1. HDOJ/HDU 1015 Safecracker(深搜)
  2. HDOJ/HDU 1556 Color the ball(树状数组)
  3. 为 Joomla 而生的 Kunena 论坛安装手册
  4. Java设计模式之装饰模式趣谈
  5. 一步一步制作yaffs/yaffs2根文件系统(七)---真挚地道歉以及纠正前边出现的错误!
  6. HDU 2298 Toxophily
  7. Spring学习总结
  8. HTML5和CSS3不仅仅是两项新的Web技术标准
  9. window系统上用PHP获取本地物理IP代码
  10. PHP面试题二