UVA1389 Hard Life (01分数规划+最大流)

Luogu

题目描述略

题解时间

$ (\frac{\Sigma EdgeCount}{\Sigma PointCount})_{max} $

是什么已经不用说了⑧

经典的01分数规划

上来先二分答案$ ans $

之后考虑判断

根据选边与选点的关系

考虑建出这样一个图:

建立源点 $ S $ 与汇点 $ P $

对于原图中的每条边看做一个点,从 $ S $ 向这个点建流量为 $ 1 $ 的边

对于原图中的每个点向 $ T $ 建流量为 $ ans $ 的边

对于原图中的每条边所代表的点,向这条边连接的两个点建流量为 $ 1 $ 的边

跑最大流, $ maxflow \leq m $ 即可

原理?

我们回顾一下柿子

$ \frac{\Sigma EdgeCount}{\Sigma PointCount} \leq ans $

转换一下就是

$ \Sigma EdgeCount-\Sigma PointCount*ans \leq 0 $

好像已经很明显了⑧

那就先这样吧(溜走)

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
using namespace std;
namespace LarjaIX
{
const int N=2011;
const int inf=0x3f3f3f3f;
const double eps=1e-8;
const double dinf=1e8;
struct sumireko{int to,ne;double w;}e[N<<2];
int he[N],ecnt=1;
void addline(int f,int t,double w)
{
e[++ecnt].to=t,e[ecnt].w=w;
e[ecnt].ne=he[f],he[f]=ecnt;
e[++ecnt].to=f,e[ecnt].w=0;
e[ecnt].ne=he[t],he[t]=ecnt;
}
int head[N],dep[N];
queue<int>q;
bool ins[N];
bool bfs(int sp,int ep)
{
memcpy(head,he,sizeof(head));
memset(dep,0x3f,sizeof(dep));
dep[sp]=1,q.push(sp);
while(!q.empty())
{
int x=q.front();q.pop();
for(int ei=he[x],t=e[ei].to;ei;ei=e[ei].ne,t=e[ei].to)
if(dep[t]==inf&&e[ei].w>eps) dep[t]=dep[x]+1,q.push(t);
}
return dep[ep]!=inf;
}
double dfs(int x,double lim,int ep)
{
if(x==ep||lim<eps) return lim;
double ret=0,tmp=0;
for(int ei=head[x],t=e[ei].to;ei;ei=e[ei].ne,t=e[ei].to)
{
head[x]=ei;
if(dep[t]==dep[x]+1)if((tmp=dfs(t,min(e[ei].w,lim),ep))>eps)
{
lim-=tmp,ret+=tmp;
e[ei].w-=tmp,e[ei^1].w+=tmp;
if(lim<eps) break;
}
}
return ret;
}
double dinic(int sp,int ep)
{
double ret=0;
while(bfs(sp,ep)) ret+=dfs(sp,dinf,ep);
return ret;
}
int n,m;
int lx[N],ly[N];
int maid()
{
while(~scanf("%d%d",&n,&m))
{
if(!m){puts("1");puts("1");continue;}
for(int i=1;i<=m;i++) scanf("%d%d",&lx[i],&ly[i]);
double ansl=0,ansr=m,ansm=0,eeps=1.0/n/n;
while(ansr-ansl>eeps)
{
ansm=(ansl+ansr)/2;
for(int i=1;i<=m;i++) addline(n+i,lx[i],1.0),addline(n+i,ly[i],1.0);
for(int i=1;i<=m;i++) addline(n+m+1,n+i,1.0);
for(int i=1;i<=n;i++) addline(i,n+m+2,ansm);
double tmp=dinic(n+m+1,n+m+2);
if((double)m-tmp>eps) ansl=ansm;
else ansr=ansm;
ecnt=1,memset(he,0,sizeof(he));
}
ansm=ansl;
for(int i=1;i<=m;i++) addline(n+i,lx[i],dinf),addline(n+i,ly[i],dinf);
for(int i=1;i<=m;i++) addline(n+m+1,n+i,1.0);
for(int i=1;i<=n;i++) addline(i,n+m+2,ansm);
dinic(n+m+1,n+m+2);
bfs(n+m+1,n+m+2);
int ans=0;
for(int i=1;i<=n;i++) if(dep[i]!=inf) ans++;
printf("%d\n",ans);
for(int i=1;i<=n;i++) if(dep[i]!=inf) printf("%d\n",i);
ecnt=1,memset(he,0,sizeof(he));
}
return 0;
}
}
int main(){return LarjaIX::maid();}

UVA1389 Hard Life (01分数规划+最大流)的更多相关文章

  1. 【BZOJ4819】 新生舞会(01分数规划,费用流)

    Solution 考虑一下这个东西的模型转换: \(\frac{\sum_{i=1}^n{a_i}}{\sum_{i=1}^n{b_i}}\) 然后转换一下发现显然是01分数规划. \(\sum_{i ...

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

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

  3. 【BZOJ4819】[Sdoi2017]新生舞会 01分数规划+费用流

    [BZOJ4819][Sdoi2017]新生舞会 Description 学校组织了一次新生舞会,Cathy作为经验丰富的老学姐,负责为同学们安排舞伴.有n个男生和n个女生参加舞会 买一个男生和一个女 ...

  4. P3705 [SDOI2017]新生舞会 01分数规划+费用流

    $ \color{#0066ff}{ 题目描述 }$ 学校组织了一次新生舞会,Cathy作为经验丰富的老学姐,负责为同学们安排舞伴. 有\(n\)个男生和\(n\)个女生参加舞会买一个男生和一个女生一 ...

  5. BZOJ-4819: 新生舞会(01分数规划+费用流)

    Description 学校组织了一次新生舞会,Cathy作为经验丰富的老学姐,负责为同学们安排舞伴.有n个男生和n个女生参加舞会 买一个男生和一个女生一起跳舞,互为舞伴.Cathy收集了这些同学之间 ...

  6. BZOJ4819 [Sdoi2017]新生舞会 【01分数规划 + 费用流】

    题目 学校组织了一次新生舞会,Cathy作为经验丰富的老学姐,负责为同学们安排舞伴.有n个男生和n个女生参加舞会 买一个男生和一个女生一起跳舞,互为舞伴.Cathy收集了这些同学之间的关系,比如两个人 ...

  7. ZOJ 2676 Network Wars ★(最小割算法介绍 && 01分数规划)

    [题意]给出一个带权无向图,求割集,且割集的平均边权最小. [分析] 先尝试着用更一般的形式重新叙述本问题.设向量w表示边的权值,令向量c=(1, 1, 1, --, 1)表示选边的代价,于是原问题等 ...

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

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

  9. 【BZOJ 4819】 4819: [Sdoi2017]新生舞会 (0-1分数规划、二分+KM)

    4819: [Sdoi2017]新生舞会 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 601  Solved: 313 Description 学校 ...

随机推荐

  1. Solution -「LOCAL」「cov. HDU 6816」折纸游戏

    \(\mathcal{Description}\)   Link(削弱版).   \(n\) 张纸叠在一起对折 \(k\) 次,然后从上到下为每层的正反两面写上数字,求把纸重新摊平后每张纸上的数字序列 ...

  2. C#使用 WebRequest 异步获取网页并自动忽略SSL证书

    C#使用 WebRequest 模拟浏览器请求访问网页并自动忽略HTTPS安全证书 以下两个C#异步方法,封装了WebRequest请求,支持忽略SSL证书. 作者:张赐荣 1.Get请求      ...

  3. 显式锁之ReentrantLock实现

    下图是Lock接口清单,定义了一些抽象的锁操作.Java本身提供了内部锁机制,那么还需要显示Lock,何用?与内部加锁机制不同,Lock提供了无条件.可轮询.定时.可中断的锁获取操作:所有加锁和解锁的 ...

  4. python中类的调用

    1 class Computer: # 创建类,类名首字母大写 2 screen = True # 类的属性 3 4 def start(self): # 创建实例方法,不要漏了 self 5 pri ...

  5. python-通过configparser模块读取后缀为 .ini 的配置文件信息

    前言 一般为了方便会将路径,连接信息等写到配置文件(通常会将这些信息写到yaml,ini....配置文件)中,configparser模块读取后缀为 .ini 的配置文件信息 配置文件格式 #存在 c ...

  6. 【第一期百题计划进行中,快来打卡学习】吃透java、细化到知识点的练习题及笔试题,助你轻松搞定java

    [快来免费打卡学习]参与方式 本期百题计划开始时间:2022-02-09,今日打卡题已在文中标红. 0.本文文末评论区打卡,需要登录才可以打卡以及查看其他人的打卡记录 1.以下练习题,请用对应的知识点 ...

  7. Sqlmap数据库注入攻击

    实验目的 利用sqlmap命令破解出access数据中的admin的密码bfpns 实验原理 SQLMap是一个先进的自动化SQL注入工具,其主要功能是扫描.发现并利用给定的URL的SQL注入漏洞.目 ...

  8. 3款大数据bi工具,让企业数据分析更简单

    ​企业数据可视化的髙速发展趋势让互联网时代的数据分析及可视化拥有全新的面貌.企业针对信息内容的数据分析及可视化,的要求在日益严格,那么有哪些在企业数据分析方面做得好的大数据bi工具呢? 一.大数据bi ...

  9. 利用SSH隧道加密技术隐蔽C&C通信流量

    在网络攻防博弈中,网络流量特征分析类安全防御措施得到了广泛应用.众多厂商和企业对网络流量进行恶意流量分析检测,从而针对性的采取防御措施,如各级ISP在骨干网络设备上大多采用网络流量分析检测的防御方案. ...

  10. 【C# IO 操作 】内存包装类 Memory <T>和 Span<T> 相关类型

    简介 .NET 包含多个相互关联的类型,它们表示任意内存的连续的强类型区域. 这些方法包括: System.Span<T> 用于访问连续的内存区域 得到该类型的实例: 1个T类型的数组 1 ...