题目:http://codeforces.com/contest/553/problem/D

在一个无向图中,有若干坏点,选择一个不包含坏点的集合,使得集合中p值最小的点的p值最大。一个点的p值=集合中与该点相连的点的个数 / 与改点相连的总点数.


思路:考虑到p值是0到1的实数值,可以二分这个最小值。每次判断当前pi是否可以成立,做法是bfs。首先把所有点加进集合中,把不符合情况的点从集合中删除,删除的时候会影响到其他点,所以要维护一个欲删除点的队列,也就是bfs一遍,记住更新答案。

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<vector>
#include<set>
using namespace std;
typedef long long ll;
const int N = 1e5+10;
const double eps = 1e-8;
vector<int> g[N];
int n,m,k,vis[N];
int kill[N];
set<int> ss,ans_set;
set<int>::iterator it;
double ans = 0;
int tmp[N];int ok(double p){queue<int> q;ss.clear();memset(vis,0,sizeof(vis));for(int i=1;i<=n;i++){ss.insert(i);tmp[i] = g[i].size();if(kill[i]){vis[i] = 1;q.push(i);}}while(!q.empty()){int wt = q.front() ; q.pop();ss.erase(wt);for(int i=0;i<g[wt].size();i++){int u = g[wt][i];if(vis[u]) continue;tmp[u]--;double hc = 1.0*tmp[u]/g[u].size();if(hc<p){vis[u] = 1;q.push(u);}}}int fl = 1;for(it=ss.begin();it!=ss.end();it++)if(1.0*tmp[*it]/g[*it].size() < p){ fl = 0 ; break;}if(fl && ss.size()>0){if(p>ans){ans = p;ans_set = ss;}return 1;}return 0;
}int main(){cin >> n >> m >> k;ans_set.clear();memset(kill,0,sizeof(kill));for(int i=0;i<=n;i++) g[i].clear();for(int i=1;i<=k;i++){int x;scanf("%d",&x);kill[x] = 1;}for(int i=1;i<=m;i++){int u,v;scanf("%d%d",&u,&v);g[u].push_back(v);g[v].push_back(u);}int co = 0;double high=1.0 , low = 0.0;while(co<40){co++;double mid = (high + low)/2;if( ok(mid) ) low = mid;else high = mid;}if(ans_set.size()==0){cout<<1<<endl;for(int i=1;i<=n;i++) if(!kill[i]){cout<<i<<endl;break;}}else{cout<<ans_set.size()<<endl;for(it=ans_set.begin();it!=ans_set.end();it++)cout<<*it<<" ";cout<<endl;}return 0;
}

Codeforces Round #309 (Div. 1)D. Nudist Beach 二分+bfs相关推荐

  1. Codeforces Round #725 (Div. 3) G. Gift Set 二分

    传送门 文章目录 题意: 思路: 题意: 有两种物品分别有x,yx,yx,y个,每次可以从一个拿出aaa个,另一个拿出bbb个分成一组,问最多能分成多少组. 思路: 这个题有一个显然的单调性,所以二分 ...

  2. Codeforces Round #636 (Div. 3) E. Weights Distributing 思维 + bfs

    传送门 文章目录 题意: 思路: 题意: n≤2e5,m≤2e5n\le2e5,m\le2e5n≤2e5,m≤2e5 思路: 怎么感觉每场div3div3div3都有一个巧妙的图论题. 首先如果只有两 ...

  3. Codeforces Round #709 (Div. 1) B. Playlist 链表维护 + bfs

    传送门 文章目录 题意: 思路: 题意: 思路: 紧跟刘爷脚步补题. 不难想到用链表维护下一个数是什么,这样就跟以前做过的一个题差不多了,首先将初始的时候删掉的点的前一个点即为题目中的AAA入队,让后 ...

  4. Codeforces Round #646 (Div. 2) E(贪心,bfs)

    Codeforces Round #646 (Div. 2) E 题目大意: 给一棵树,每个节点有三个权值 A,B,C, (B,C为0或1),每次你可以花费 A[u] *k的代价让A子树中的任意 k ...

  5. Codeforces Round #309 (Div. 1)

    A. Kyoya and Colored Balls 大意: 给定$k$种颜色的球, 第$i$种颜色有$c_i$个, 一个合法的排列方案满足最后一个第$i$种球的下一个球为第$i+1$种球, 求合法方 ...

  6. Codeforces Round #309 (Div. 2) A. Kyoya and Photobooks 字符串水题

    A. Kyoya and Photobooks Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/5 ...

  7. Codeforces Round #309 (Div. 2) C

    题意: 就是给出总共同拥有k种颜色.每种颜色有ki种,排列必须满足第i+1种的最后一种颜色必须在第i种最后一种颜色的后面,其它颜色任意.总共同拥有多少种排列点的方法. 分析: 如果d[i]表示前i种的 ...

  8. Codeforces Round #361 (Div. 2) B. Mike and Shortcuts bfs

    B. Mike and Shortcuts 题目连接: http://www.codeforces.com/contest/689/problem/B Description Recently, Mi ...

  9. Codeforces Round #321 (Div. 2) Kefa and Company 二分

    原题链接:http://codeforces.com/contest/580/problem/B 题意: 给你一个集合,集合中的每个元素有两个属性,$m_i,s_i$,让你求个子集合,使得集合中的最大 ...

最新文章

  1. 4个重要的量子理论实验综述
  2. 机器人抓矸石_基于机器视觉的多机械臂煤矸石分拣机器人系统研究
  3. 关于ECS设计以及MVC分层设计和组件化设计的思考和总结(这个标题就问你长不长)
  4. Win10如何找出占用硬盘空间大的文件及怎么删除
  5. ROS服务通信机制原理及示例代码
  6. Rabbits —— HDU-6227
  7. .NET Core2.0 使用EF做数据操作
  8. python导入turtle报错_由于“未定义宽度错误”,我无法将turtle模块导入Python2.7.10...
  9. 用线性同余法生成伪随机数
  10. ExtJS EditorGridPanel 示例之JSON格式Store前后台增删改查
  11. 中级计算机平面设计考试题,平面设计师(中级)技能试题答案
  12. 小扎爆料:当年为了结婚,差点让Facebook提前上市
  13. android 闪屏动态界面,Android实现闪屏欢迎界面
  14. 巴比特 | 元宇宙每日必读:蒂芙尼宣布推出限量版 CryptoPunk 定制吊坠
  15. 我们与专家讨论了JavaScript –文字记录
  16. 银行卡在ATM机器上插入后显示IC磁条芯片卡拒绝交易解决办法
  17. 如何修改Adobe Acrobat身份信息中的登录名
  18. userdel删除用户时候提示:userdel: user xx is currently logged in
  19. NAT与NAT穿透(一)
  20. 字母数字特殊字符部分unicode对照表

热门文章

  1. Welcome To Jekyll
  2. 【排错】PCping不通网关
  3. 矩阵的运算----(一)
  4. 定义一个Car类,完成成员方法构造方法的多种使用方法以及基本案例
  5. 大事!全国中小学生竞赛NOC
  6. 【大学物理·早期量子论和量子力学基础】康普顿效应
  7. Cadence OrCAD/PSpice ABM模型中ABM表达式器件常见问题和使用TIPS
  8. 高效程序员工作法(八)
  9. python编程基础(文字版)
  10. java通过端口1433连接到主机_通过端口1433连接到主机失败