题目

\(n\) 个点,\(m\) 条边的一个无向图,问导出子图的边数除以点数的最大值


分析

考虑二分这个答案,也就是0/1分数规划之后转换成 \(E-mid*V>0\)

这个问题虽然可以精确到具体的最小割,但是也可以泛化到一般的问题。

可以发现转换成最大权闭合子图,源点连边,汇点连点,边和点之间连 \(inf\)。

然后最后就是在残余网络上记录哪些点可以被访问,就是导出子图的点。

所以最大密度子图的问题都可以转化成最大权闭合子图吧。


代码

#include <iostream>
#include <queue>
using namespace std;
const int N=1111; typedef double db;
struct node{int y; db w; int next;}e[N<<3];
int dis[N],as[N],et=1,X[N],tot,Y[N],v[N],mark[N],b[N],n,m,S,T;
void add(int x,int y,db w){
e[++et]=(node){y,w,as[x]},as[x]=et;
e[++et]=(node){x,0,as[y]},as[y]=et;
}
bool bfs(int st){
for (int i=1;i<=T;++i) dis[i]=0;
queue<int>q; q.push(st),dis[st]=1;
while (!q.empty()){
int x=q.front(); q.pop();
for (int i=as[x];i;i=e[i].next)
if (e[i].w>0&&!dis[e[i].y]){
dis[e[i].y]=dis[x]+1;
if (e[i].y==T) return 1;
q.push(e[i].y);
}
}
return 0;
}
db min(db a,db b){return a<b?a:b;}
db dfs(int x,db now){
if (x==T||!now) return now;
db rest=0,f;
for (int i=as[x];i;i=e[i].next)
if (e[i].w>0&&dis[e[i].y]==dis[x]+1){
f=dfs(e[i].y,min(now-rest,e[i].w)),
rest+=f,e[i].w-=f,e[i^1].w+=f;
if (now==rest) return now;
}
if (!rest) dis[x]=0;
return rest;
}
bool check(db mid){
for (int i=2;i<=et;i+=2) e[i].w+=e[i^1].w,e[i^1].w=0;
for (int i=1;i<=n;++i) e[mark[i]].w=mid;
db ans=m;
while (bfs(S)) ans-=dfs(S,1e9);
return ans>1e-8;
}
void Dfs(int x){
v[x]=1;
for (int i=as[x];i;i=e[i].next)
if (!v[e[i].y]&&e[i].w) Dfs(e[i].y);
}
int main(){
ios::sync_with_stdio(0);
while (cin>>n>>m){
if (!m) {cout<<"1\n1\n\n"; continue;}
for (int i=1;i<=m;++i) cin>>X[i]>>Y[i];
S=n+m+1,T=S+1,et=1;
for (int i=1;i<=m;++i) add(S,i+n,1);
for (int i=1;i<=n;++i) add(i,T,0),mark[i]=et-1;
for (int i=1;i<=m;++i) add(i+n,X[i],1e9),add(i+n,Y[i],1e9);
db l=1.0/n,r=m,eps=1.0/(n*n);
while (l+eps<r){
db mid=(l+r)/2;
if (check(mid)) l=mid;
else r=mid;
}
check(l),Dfs(S),tot=0;
for (int i=1;i<=n;++i) if (v[i]) b[++tot]=i;
cout<<tot<<endl;
for (int i=1;i<=tot;++i) cout<<b[i]<<endl;
cout<<endl;
for (int i=1;i<=T;++i) as[i]=v[i]=0;
}
return 0;
}

#最大密度子图,0/1分数规划#UVA1389 Hard Life的更多相关文章

  1. poj 2976 Dropping tests 0/1分数规划

    0/1分数规划问题,用二分解决!! 代码如下: #include<iostream> #include<stdio.h> #include<algorithm> # ...

  2. bzoj 3597: [Scoi2014]方伯伯运椰子 0/1分数规划

    3597: [Scoi2014]方伯伯运椰子 Time Limit: 30 Sec  Memory Limit: 64 MBSubmit: 144  Solved: 78[Submit][Status ...

  3. LOJ 3089 「BJOI2019」奥术神杖——AC自动机DP+0/1分数规划

    题目:https://loj.ac/problem/3089 没想到把根号之类的求对数变成算数平均值.写了个只能得15分的暴力. #include<cstdio> #include< ...

  4. poj2728 Desert King【最优比率生成树】【Prim】【0/1分数规划】

    含[最小生成树Prim]模板. Prim复杂度为$O(n^2),适用于稠密图,特别是完全图的最小生成树的求解.   Desert King Time Limit: 3000MS   Memory Li ...

  5. POJ - 2976 Dropping tests && 0/1 分数规划

    POJ - 2976 Dropping tests 你有 \(n\) 次考试成绩, 定义考试平均成绩为 \[\frac{\sum_{i = 1}^{n} a_{i}}{\sum_{i = 1}^{n} ...

  6. [SDOI2017]新生舞会 0/1分数规划

    ---题面--- 题解: 0/1分数规划,,,但是竟然有诡异的精度问题???因为这个被卡了好久 中途还写过一次KM,,,结果陷入死循环,,,我大概是写了一个假KM,,,于是放弃KM,回来调费用流 这个 ...

  7. bzoj3232圈地游戏——0/1分数规划+差分建模+判环

    Description DZY家的后院有一块地,由N行M列的方格组成,格子内种的菜有一定的价值,并且每一条单位长度的格线有一定的费用. DZY喜欢在地里散步.他总是从任意一个格点出发,沿着格线行走直到 ...

  8. Bzoj1486/洛谷P3199 最小圈(0/1分数规划+spfa)/(动态规划+结论)

    题面 Bzoj 洛谷 题解(0/1分数规划+spfa) 考虑\(0/1\)分数规划,设当前枚举到的答案为\(ans\) 则我们要使(其中\(\forall b_i=1\)) \[ \frac{\sum ...

  9. Bzoj4753/洛谷P4432 [JSOI2016]最佳团体(0/1分数规划+树形DP)

    题面 Bzoj 洛谷 题解 这种求比值最大就是\(0/1\)分数规划的一般模型. 这里用二分法来求解最大比值,接着考虑如何\(check\),这里很明显可以想到用树形背包\(check\),但是时间复 ...

  10. Luogu P1768 天路 0/1分数规划+dfs spfa

    “那是一条神奇的天路诶~~把第一个神犇送上天堂” 怕不是某大佬早就A了这题,然鹅我又调了很久很久... 好吧就是0/1分数规划,但是跑的dfs的spfa(好像题解说bfs过不了????不知) 发现把s ...

随机推荐

  1. win32 - Rendering a Stream示例

    仅供参考 文档: Rendering a Stream 代码示例: #include <cstdio> #include <Windows.h> // Windows mult ...

  2. [BUUCTF][WEB][ACTF2020 新生赛]Upload 1

    打开靶机url,右键查看网页源代码 其中有一段代码 <div class="light"><span class="glow"> < ...

  3. ubuntu18.04下安装MySQL5.7

    更新源 sudo apt update 安装mysql sudo apt install mysql-server 使用sudo mysql进入数据设置root账户的密码和权限 sudo mysql ...

  4. java个人博客

    效果浏览 首页 详情页 Aboutme 后台管理 管理/添加博客 添加分类 管理员管理 友情链接 访问地址 前台地址http://localhost 后台地址:http://localhost/adm ...

  5. Mysql基础目录

    尚硅谷Mysql课程笔记 课程链接: https://www.bilibili.com/video/BV1iq4y1u7vj?p=1 第01章_数据库概述 第02章_MySQL环境搭建 第03章_基本 ...

  6. C# 课堂管理系统(火影忍者界面!!!)

    1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 usin ...

  7. 10、zookeeper客户端curator

    curator介绍 https://blog.csdn.net/wo541075754/article/details/68067872 关于第三方客户端的小介绍 zkClient有对dubbo的一些 ...

  8. Thinkphp6 自定义命令创建类文件

    以创建控制器为例 1.先通过 think 命令创建一个make文件,效果如下图: php think make:command make/MyController 2.修改上面创建的文件[MyCont ...

  9. 《Relation of the Relations A New Paradigm of the Relation Extraction Problem》论文阅读笔记

    原文 代码 摘要 为了解决传统的关系抽取(RE)方法只能识别两个实体之间的关系,而忽略了同一上下文中多个关系之间的相互依赖性,即关系的关系(relation of relations,RoR)的问题, ...

  10. Zabbix_get基础命令浅析

    zabbix_get是Zabbix监控系统的一个命令行工具,可以用于从Zabbix服务器或代理获取数据.以下是zabbix_get的基本使用方法: 1.获取一个单独的键值对 使用以下命令可以获取一个单 ...