题目:

Description

在一家公司中,人事部经理与业务部经理不和。一次,总经理要求人事部从公司的职员中挑选出一些来帮助业务部经理完成一项任务。人事部经理发现,在公司的所有职员中,有一些人相处得很不好。如果把他们同时放在一个工作小组中,他们将会给主管带来不小的麻烦。人事部经理还知道,在一个工作小组中,主管人员的麻烦程度可以认为是(带来麻烦的人的对数/总人数) 。于是,人事部经理决定选取这样的一些人,使得业务部经理的麻烦度最大。你的任务是帮助人事部经理达到他的目的。 在这样的一个公司中,保证公司的人数小于100 人,带来麻烦的员工不会多于1000 对。

Input

第一行给出N,M代表共有N个人,M对人之间有怨念 下面M行,每行两个数,代表这两个人有怨念

Output

输出最多能找出多少个人,人数>=1

题解:

我不想写这道题的题解















Sky_miner是我的号hzoi_admin是我提交次数不够了借用的号.

求不D

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include <cmath>
using namespace std;
typedef int ll;
inline void read(int &x){
x=0;char ch;bool flag = false;
while(ch=getchar(),ch<'!');if(ch == '-') ch=getchar(),flag = true;
while(x=10*x+ch-'0',ch=getchar(),ch>'!');if(flag) x=-x;
}
const int maxn = 80048;
const int maxm = 100005;
const int maxnode = (maxn+maxm)<<1;
struct Edge{
int to,next;
long double cap;
}G[maxnode];
int head[maxnode],cnt=1;
void add(int u,int v,long double c){
G[++cnt].to = v;
G[cnt].next = head[u];
head[u] = cnt;
G[cnt].cap = c;
}
inline void insert(int u,int v,long double c){
add(u,v,c);add(v,u,0);
}
inline void clear(){
memset(head,-1,sizeof head);
cnt = 1;
}
#define v G[i].to
int dis[maxnode];
int S,T;
inline bool bfs(){
memset(dis,-1,sizeof dis);
queue<int>q;q.push(S);
dis[S] = 0;
while(!q.empty()){
int u = q.front();q.pop();
for(int i = head[u];i != -1;i=G[i].next){
if(dis[v] == -1 && G[i].cap > 1e-8){
dis[v] = dis[u] + 1;
q.push(v);
}
}
}return dis[T] != -1;
}
long double dfs(int u,long double f){
if(u == T || fabs(f) < 1e-8) return f;
long double ret = 0;
for(int i = head[u];i != -1;i=G[i].next){
if(dis[v] == dis[u] + 1 && G[i].cap > 1e-8 ){
long double x = dfs(v,min(G[i].cap,f));
ret += x;f -= x;
G[i].cap -= x;
G[i^1].cap += x;
if(fabs(f) < 1e-8) break;
}
}return ret;
}
#undef v
inline long double dinic(){
long double ret = 0;
while(bfs()) ret += dfs(S,1e9);
return ret;
}
struct Node{
int u,v;
}e[maxm];
int n,m;
bool check(double ans){
memset(head,-1,sizeof(head));cnt=1;
double sum=m;S=0;T=n+m+1;
for(int i=1;i<=n;++i){
insert(S,i,ans);
}
for(int i=1;i<=m;++i){
insert(n+i,T,1);
insert(e[i].u,n+i,1e9);
insert(e[i].v,n+i,1e9);
}
return sum>dinic();
}
int dfn[maxn];
int ans;
void DFS(int x){
if(1<=x&&x<=n)ans--;
dfn[x]=1;
for(int pt=head[x];pt!=-1;pt=G[pt].next){
if(G[pt].cap>1e-3&&!dfn[G[pt].to])DFS(G[pt].to);
}
}
int main(){
read(n);read(m);
if(m == 0) return puts("1");
for(int i=1;i<=m;++i){
read(e[i].u);read(e[i].v);
}
long double l = .0,r = 1e4;
while(l + 1e-5 < r){
long double mid = (l+r)/2.0;
if(check(mid)) l = mid;
else r = mid;
}ans = n;
DFS(S);
printf("%d\n",max(ans,1));
getchar();getchar();
return 0;
}

bzoj 1312: Hard Life 01分数规划+网络流的更多相关文章

  1. BZOJ2285 [SDOI2011]保密 【01分数规划 + 网络流】

    题目 现在,保密成为一个很重要也很困难的问题.如果没有做好,后果是严重的.比如,有个人没有自己去修电脑,又没有拆硬盘,后来的事大家都知道了. 当然,对保密最需求的当然是军方,其次才是像那个人.为了应付 ...

  2. BZOJ 1486 最小圈(01分数规划)

    好像是很normal的01分数规划题.最小比率生成环. u(c)=sigma(E)/k.转化一下就是k*u(c)=sigma(E). sigma(E-u(c))=0. 所以答案对于这个式子是有单调性的 ...

  3. BZOJ.1312.[Neerc2006]Hard Life(分数规划 最大权闭合子图)

    BZOJ 最大密度子图. 二分答案\(x\),转为求是否存在方案满足:\(边数-x*点数\geq 0\). 选一条边就必须选两个点,所以可以转成最大权闭合子图.边有\(1\)的正权,点有\(x\)的负 ...

  4. bzoj 4753 最佳团体 —— 01分数规划+树形背包

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4753 注意赋初值为 -inf: eps 设为 1e-3 会 WA ... 代码如下: #in ...

  5. bzoj 5281 Talent Show —— 01分数规划+背包

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=5281 二分一个答案比值,因为最后要*1000,不如先把 v[] *1000,就可以二分整数: ...

  6. BZOJ.4819.[SDOI2017]新生舞会(01分数规划 费用流SPFA)

    BZOJ 洛谷 裸01分数规划.二分之后就是裸最大费用最大流了. 写的朴素SPFA费用流,洛谷跑的非常快啊,为什么有人还T成那样.. 当然用二分也很慢,用什么什么迭代会很快. [Update] 19. ...

  7. bzoj 4501: 旅行 01分数规划+概率期望dp

    题目大意: http://www.lydsy.com/JudgeOnline/problem.php?id=4501 题解: 首先我们不考虑可以删除边的情况下,如何计算期望边数. 然后我们发现这是个有 ...

  8. bzoj 3597: [Scoi2014]方伯伯运椰子 [01分数规划 消圈定理 spfa负环]

    3597: [Scoi2014]方伯伯运椰子 题意: from mhy12345 给你一个满流网络,对于每一条边,压缩容量1 需要费用ai,扩展容量1 需要bi, 当前容量上限ci,每单位通过该边花费 ...

  9. BZOJ.4753.[JSOI2016]最佳团体(01分数规划 树形背包DP)

    题目链接 \(Description\) 每个点有费用si与价值pi,要求选一些带根的连通块,总大小为k,使得 \(\frac{∑pi}{∑si}\) 最大 \(Solution\) 01分数规划,然 ...

随机推荐

  1. fzu2020( c(n,m)%p,其中n, m, p (1 <= m <= n <= 10^9, m <= 10^4, m < p < 10^9, p是素数) )

    基本的模板题,统计分子分母中p出现的次数,然后求逆元取模. // // main.cpp // fzu2020 // // Created by 陈加寿 on 15/12/27. // Copyrig ...

  2. tomcat 编码问题

    默认情况下,tomcat使用的的编码方式:iso8859-1 修改tomcat下的conf/server.xml文件 找到如下代码:    < Connector port="8080 ...

  3. linux c编程:FIFO

    前面介绍的pipe属于匿名管道 管道的主要局限性正体现在它的特点上: 只支持单向数据流: 只能用于具有亲缘关系的进程之间: 没有名字: 管道的缓冲区是有限的(管道制存在于内存中,在管道创建时,为缓冲区 ...

  4. BAPI_SALESORDER_CREATEFROMDAT2 创建退货SO

    BAPI_SALESORDER_CREATEFROMDAT2创建退货订单时,会出现以下错误:不允许业务对象 BUS2032 和销售凭证类别 H 的组合. 解决办法: 采用/原BAPI的内嵌BAPI: ...

  5. vuex源码 安装依赖问题

    今天下载vuex源码时 安装依赖出现以下问题 > chromedriver@2.32.3 install /Users/bao/Desktop/vue-store/vuex/node_modul ...

  6. 【Mybatis】Insert批量操作

    话不多说,直接上代码. <insert id="pesistRT" parameterType="com.test.model.RTSummarizer" ...

  7. python基础12 ---函数模块2

    函数模块 一.sys函数模块详解 1.sys.argv[x] 功能:从程序外部接受参数,接收的参数个数可以是多个,在程序内部sys.argv吧这些外部参数转换成元组的形式,然后以索引x的方式在内部取出 ...

  8. rest-client restclient get post写法

    get url = "https://api.weixin.qq.com/sns/jscode2session" data = { appid: "××××", ...

  9. Yii2 如何更好的在页面注入CSS

    首先 先添加一个widgets,代码如下(提示:使用时注意修改命名空间) <?php /** * User: yiqing * Date: 2014/12/15 * Time: 0:21 */ ...

  10. monokai-background

    foreground-color:f8f8f2 background-color:272822