POJ 3155 Hard Life 最大密度子图

海康Visionmaster-通讯管理:使用 Modbus TCP 通讯 协议与流程交互 阅读详情
 
Hard Life
Time Limit: 8000MS Memory Limit: 65536K
Total Submissions: 4345 Accepted: 1226
Case Time Limit: 2000MS Special Judge

Description

John is a Chief Executive Officer at a privately owned medium size company. The owner of the company has decided to make his son Scott a manager in the company. John fears that the owner will ultimately give CEO position to Scott if he does well on his new manager position, so he decided to make Scott’s life as hard as possible by carefully selecting the team he is going to manage in the company.

John knows which pairs of his people work poorly in the same team. John introduced a hardness factor of a team — it is a number of pairs of people from this team who work poorly in the same team divided by the total number of people in the team. The larger is the hardness factor, the harder is this team to manage. John wants to find a group of people in the company that are hardest to manage and make it Scott’s team. Please, help him.

In the example on the picture the hardest team consists of people 1, 2, 4, and 5. Among 4 of them 5 pairs work poorly in the same team, thus hardness factor is equal to 5⁄4. If we add person number 3 to the team then hardness factor decreases to 6⁄5.

Input

The first line of the input file contains two integer numbers n and m (1 ≤ n ≤ 100, 0 ≤ m ≤ 1000). Here n is a total number of people in the company (people are numbered from 1 to n), and m is the number of pairs of people who work poorly in the same team. Next m lines describe those pairs with two integer numbers ai and bi (1 ≤ ai, bi ≤ n, ai ≠ bi) on a line. The order of people in a pair is arbitrary and no pair is listed twice.

Output

Write to the output file an integer number k (1 ≤ k ≤ n) — the number of people in the hardest team, followed by k lines listing people from this team in ascending order. If there are multiple teams with the same hardness factor then write any one.

Sample Input

sample input #1
5 6
1 5
5 4
4 2
2 5
1 2
3 1

sample input #2
4 0

 

Sample Output

sample output #1
4
1
2
4
5

sample output #2
1
1

 

Hint

Note, that in the last example any team has hardness factor of zero, and any non-empty list of people is a valid answer.

Source

 
 

给定一个无向图,要求它的一个子图,使得子图中边数|E|与点数|V|的比值最大。

解法一:

假设答案为k ,则要求解的问题是:选出一个合适的点集V和边集E,令(|E| - k * |V|) 取得最大值。所谓“合适”是指满足如下限制:若选择某条边,则必选择其两端点。

建图:以原图的边作为左侧顶点,权值为1;原图的点作为右侧顶点,权值为-k(相当于 支出k)。

若原图中存在边(u,v),则新图中添加两条边([uv]-->u), ([uv]-->v),转换为最大权闭合子图。

解法二:

把原图中的无向边转换成两条有向边,容量为1。

设一源点,连接所有点,容量为U(取m)。

设一汇点,所有点连接汇点,容量为 U+2g-dv 。

二分枚举最大密度g,其中dv为v的度。

判断(U*n-MaxFlow)/2.>=0。

最后跳出的L就是最大密度。

拿这个L再重新建图,求最大流。

然后从s出发bfs或者dfs,走残留容量大于0的边,所有能到达的点就是答案。

具体分析过程见胡伯涛的论文《最小割模型在信息学竞赛中的应用》

代码:

	#include<cstdio>
	#include<cstring>
	#define N 1005
	#define inf 1<<30
	#define min(a,b) ((a)<(b)?(a):(b))
	int n,m,s,t,num,adj[N],dis[N],q[N],d[N];
	struct edge
	{
		int v,pre;
		double w;
	}e[10005];
	struct node
	{
		int u,v;
	}E[N];
	void insert(int u,int v,double w)
	{
		e[num]=(edge){v,adj[u],w};
		adj[u]=num++;
		e[num]=(edge){u,adj[v],0};
		adj[v]=num++;
	}
	int bfs()
	{
		int i,x,v,head=0,tail=0;
		memset(dis,0,sizeof(dis));
		dis[s]=1;
		q[++tail]=s;
		while(head!=tail)
		{
			x=q[head=(head+1)%N];
			for(i=adj[x];~i;i=e[i].pre)
				if(e[i].w>0&&!dis[v=e[i].v])
				{
					dis[v]=dis[x]+1;
					if(v==t)
						return 1;
					q[tail=(tail+1)%N]=v;
				}
		}
		return 0;
	}
	double dfs(int x,double limit)
	{
		if(x==t)
			return limit;
		int i,v;
		double tmp,cost=0;
		for(i=adj[x];~i&&cost<limit;i=e[i].pre)
			if(e[i].w>0&&dis[x]==dis[v=e[i].v]-1)
			{
				tmp=dfs(v,min(limit-cost,e[i].w));
				if(tmp)
				{
					e[i].w-=tmp;
					e[i^1].w+=tmp;
					cost+=tmp;
				}
				else
					dis[v]=-1;
			}
		return cost;
	}
	double Dinic()
	{
		double ans=0;
		while(bfs())
			ans+=dfs(s,inf);
		return ans;
	}
	int ok(double mid)
	{
		int i;
		memset(adj,-1,sizeof(adj));
		num=0;
		s=0;
		t=n+1;
		for(i=1;i<=m;i++)
		{
			insert(E[i].v,E[i].u,1);
			insert(E[i].u,E[i].v,1);
		}
		for(i=1;i<=n;i++)
		{
			insert(s,i,m);
			insert(i,t,m+2*mid-d[i]);
		}
		return (m*n-Dinic())/2.>=1e-6;
	}
	bool f[N];
	void dfs(int x)
	{
		f[x]=1;
		for(int v,i=adj[x];~i;i=e[i].pre)
			if(!f[v=e[i].v]&&e[i].w>0)
				dfs(v);
	}
	int main()
	{
		while(~scanf("%d%d",&n,&m))
		{
			int i,ans=0;
			memset(d,0,sizeof(d));
			for(i=1;i<=m;i++)
			{
				scanf("%d%d",&E[i].u,&E[i].v);
				d[E[i].u]++;
				d[E[i].v]++;
			}
			if(!m)
			{
				puts("1\n1\n");
				continue;
			}
			double l=0,r=m,mid;
			while(r-l>=1./n/n)
			{
				mid=(l+r)/2.;
				if(ok(mid))
					l=mid;
				else
					r=mid;
			}
			ok(l);
			memset(f,0,sizeof(f));
			dfs(s);
			for(i=1;i<=n;i++)
				ans+=f[i];
			printf("%d\n",ans);
			for(i=1;i<=n;i++)
				if(f[i])
					printf("%d\n",i);
		}
	}


 

C#上位机案例:西门子S7协议通信+实时曲线显示(WinForm+ZedGraph) 创建/// PLC数据模型(对应DB1块)/// 采集时间(用于曲线的X轴)set;/// 温度值(℃)set;/// 压力值(MPa)set;/// PLC通信状态set;西门子S7协议通信和实时曲线显示,也是工控现场最常见的场景之一。整个开发过程的关键不在于“写出代码”,而在于“写出符合工控场景的稳定代码”——比如解耦通信逻辑与界面逻辑、处理跨线程问题、限制数据点数量、释放资源等。新手在学习时,建议先跟着步骤搭建好环境,跑通基础功能,再逐步尝试进阶优化。需要注意的是,工控上位机的核心是。 阅读详情

相关推荐

中文顶刊《会计研究》文本分析技术最新进展总结盘点

会计研究》是由中华人民共和国财政部主管、中国会计学会主办的国家一级学术期刊,为会计领域中文顶级期刊。随着大数据技术的日益成熟, 社交网络类文本 、上市公司披露类文本、媒体报道类文本、 其他类文本 、网络搜索数据、P2P 网络借贷文 本与分析师报告等文本数据逐渐成为财务会计的研究素材。

qq_52891550的博客 2891

最大密度子图

最大密度子图 首先要了解什么是最大密度子图,顾名思义,就是所有子图中密度最大的那一个。那么什么是一个子图的密度呢,这里规定子图的密度就是子图中边数和点数的比值。

harry12138小白的博客 2851

Qt + Robot Interface实现上位机和发那科机器人通信

摘要: 本文详细介绍了FANUC机器人的RobotInterface模块开发流程,包括环境配置、通信连接和上位机开发等内容,并提供了数值寄存器、位置寄存器和当前位置的读写代码等示例。适用于自动化行业有通讯需求的上位机开发人员,保姆教程,超详细版,新手也可以根据示例开发自己的通信程序。

xyhkma的博客 1750

【学习笔记】最大密度子图

内容挺单薄的……

七代目鸽影 1280

STM32—时钟树(结合系统时钟函数理解)

时钟树的概念: 我们可以把MCU的运行比作人体的运行一样,人最重要的是什么?是心跳! 心脏的周期性收缩将血液泵向身体各处。心脏对于人体好比时钟对于MCU,微控制器(MCU)的运行要靠周期性的时钟脉冲来驱动,而这个脉冲的始源往往是由外部晶体振荡器提供时钟输入,最终转换为多个外部设备的周期性运作。这种时钟“能量”的传递路径犹如大树的养分由主干流向个分支,因此称为时钟树。 STM32时钟: 在STM32...

肥宅快乐博客 1万+

k3s快速搭建k8s集群环境

k8s 搭建方式有多种,如果你是内网环境,希望占用服务器资源少或是边缘系统(如ARM系统),强烈推荐您使用 k3s进行安装 目录k3s 简介k3s架构中文官方文档三台服务器快速搭建k8s集群安装说明步骤1 修改主机名,保持唯一步骤2 安装docker步骤3 安装master节点步骤4 安装worker节点加入集群步骤5 查看集群步骤6 部署 k8s仪表盘 dashboard k3s 简介 轻量级 Kubernetes。安装简单,内存只有一半,所有的二进制都不到 100MB K3s 是一个完全符合 Ku.

gzt19881123的专栏 2445

POJ 3155 最大密度子图

题意 传送门 POJ 3155 题解 算法思路 参考《最小割模型在信息学竞赛中的应用》。分数规划,求满足条件的 xxx 最大值 ∣E∣∣V∣≥x\frac{|E|}{|V|}\geq x∣V∣∣E∣​≥x ∣E∣|E|∣E∣ 为子图边数,∣V∣|V|∣V∣ 为子图点数,不等式左边为图的密度。不同子图密度差不小于 1/∣V∣21/|V|^21/∣V∣2,考虑到多边形点与边的关系,图密度的二分范围为 ...

neweryyy的博客 215

LLM - windows下的Dify离线部署:从镜像打包到无网环境部署(亲测,包含插件部署)

LLM - windows下的Dify离线部署:从镜像打包到无网环境部署(亲测,包含插件部署)

ocean00008899的博客 1285

POJ Hard Life (最大密度子图)

Hard Life   做该题前需要先了解一些专有名词及定理。 希望你可以亲自看看2007年胡伯涛的论文! 有向图的闭合图(closure): 闭合图内任意点的任意后继也一定还在闭合图中。   题目:    给出N个人,有些人之间有联系,而有联系的两个人被认为是一个整体。如果,把人看作点,把关系看作边,则要求你求出 边 / 点 的比值最大。而这些点边之间必须是一个闭合图。

YouthDance 1384

从农田到城市:如何利用NDVI和缨帽变换提升遥感图像分类精度?

本文深入探讨了如何利用NDVI(归一化差值植被指数)和缨帽变换(Tasseled Cap Transformation)两大关键技术,有效提升从农田到城市等复杂场景的遥感图像分类精度。文章通过剖析地物光谱特征,对比了原始波段与衍生特征的优劣,并提供了在ENVI、ArcGIS及Python环境中的具体操作指南与实战策略,旨在帮助从业者构建更鲁棒的特征工程流程,从而解决地物混淆、边界模糊等常见分类难题。

redis7keeper的博客 866

查找【优快云】- 人工客服

【代码】查找【优快云】- 人工客服。

👨‍💻 前端开发者 | 技术分享者 1401

poj 3155 Hard Life 最大密度子图

经典的最大密度子图 裸题 题意:给定一个无向图G(V,E),现在想要求这样的一个值使得它的值最大: 并按升序输出这些点 关于最大密度子图的解法以及相关证明我是参考 胡伯涛 Amber的《最小割模型在信息学竞赛中的应用》 关于本题我是这么理解的: 将|V'|乘到左边之后我们可以得到一个具有单调性式子,令该式子为h(x),当且仅当h(x)==0时x即为所需求的分数。 最小割建图模型

inf_force 848

《计算机视觉:从入门到精通》技术手册 第1章 计算机视觉概述与历史演进

视觉感知与机器视觉在工程实践中常被混用,但二者存在本质差异。视觉感知强调对光学信号的语义理解与场景解释,核心在于从二维投影重建三维世界的物理与语义属性。该领域关注遮挡处理、光照变化、材质反射等复杂因素的建模,其目标是实现类似人类视觉系统的场景理解能力。机器视觉则侧重于工业场景中的精密测量与控制,通常基于结构化光源、已知几何约束与标定参数,执行边缘检测、尺寸测量、位置定位等任务。前者面向开放环境的通用理解,后者面向受控环境的精确执行。

u012133341的博客 269

poj 3155 Hard Life 网络流——最大密度子图

这是一道网络流中难度很大的题目,今天终于把它a掉了,但是想想还是觉得这题很难,建图难就算了,主要是会卡精度!!!我对精度一窍不通,只知道它很坑爹!!wa了11次,确实被坑了。。希望区域赛不会有这种题目 方法: 二分搜索 hardness factor f ,构造函数 E - f *V(E是导出子图中的边数,V是其中的点数),计算它的最大值,如果大于 0 则增加 f 的下限,小于 0 减少

量子流逝 1028

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

poj3155 Hard Life 最小割 最大密度子图

题意简述:一个公司有n个人,给出了一些有冲突的人的对数(u,v),所有为了公司更好的发展,公司的总裁决定裁人,那么总裁现在裁要裁掉冲突率最高的哪些(冲突率=人数/在这些人中存在的冲突数 分析: 很明显的一个求最大密度子图的题目,求最大密度子图的方法有两种不同的模型可以求解,一种是采用了转换为最大权闭合图的模型来求解,而另一种则是通过补集转换的思想来求解,现在就最大权闭合图的模型来谈论以下:设ma

lyc 1521

POJ 3155 Hard Life 最大密度子图

John is a Chief Executive Officer at a privately owned medium size company. The owner of the company has decided to make his son Scott a manager in the company. John fears that the owner will ultimate...

henuzxy 318

POJ - 3155 Hard Life(最大密度子图)

链接:POJ - 3155 Hard Life 题意: 给定一个含有nnn个结点,mmm条边的无向图GGG,找出其一个子图G′(V,E)G'(V,E)G′(V,E),其边的条数∣E∣|E|∣E∣和点的个数∣V∣|V|∣V∣的比值,即∣E∣∣V∣\frac{|E|}{|V|}∣V∣∣E∣​最大。(子图G′G'G′中 ∀(u,v)∈E\forall (u,v)\in E∀(u,v)∈E,有u∈V∧v...

Plus Ultra! 280

poj 3155 Hard Life (最大密度子图)

题意:一个公司有n个人,给出了一些有冲突的人的对数(u,v),公司决定裁人,那么总裁现在要裁掉冲突率最高的那些人(冲突率=在这些人中存在的冲突数/人数)。就是求出一些点,这些点之间的边数/点数最大。最大密度子图。 思路:胡伯涛的论文《最小割模型在信息学竞赛中的应用》介绍了两种方法: 第一种:转换为最大权闭合图的模型来求解: 设max g = f(x)= |E‘|/|V’| ,找一

Ezereal的博客 611

Hard Life POJ - 3155(最大密度子图)

模板题。 点数为n+mn+mn+m的方法很容易想。 点数为nnn的方法详见胡伯涛论文。 具体来说,用最小割: S−>uS->uS−>u的边被割代表uuu不在最大密度子图内。 u−>Tu->Tu−>T的边被割代表在。 那么先分数规划二分答案,再求最小割即可得到最大密度子图和联通最大密度子图与其反图的边的式子,配下系数即可得出密度。 注意分数规划中要保证分母不为零,...

Freopen的博客 222

POJ 3155 Hard Life(最大密度子图)

POJ 3155 Hard Life 题目链接 最大密度子图模板题 代码: #include #include #include #include using namespace std; const int MAXNODE = 1105; const int MAXEDGE = 100005; typedef double Type; const Type I

Remilia's 1293

poj 3155(Hard Life)分数规划/最大密度子图

题目链接:http://poj.org/problem?id=3155 题意简述:一个公司有n个人,给出了一些有冲突的人的对数(u,v),所有为了公司更好的发展,公司的总裁决定裁人,那么总裁现在裁要裁掉冲突率最高的哪些(冲突率=人数/在这些人中存在的冲突数) (题意有所

953

【POJ】3155 Hard Life 最大密度子图

传送门:【POJ】3155 Hard Life

poursoul 878

poj3155--Hard Life(最大密度子图)

poj3155:题目链接 题目大意:给出了n个点,m条无向边,选一个集合M,要求集合中的边数/点数的最最大 参考:最小割模型在信息学竞赛中的应用 先做了0-1分数规划,然后最大权闭合图,然后是最大密度子图。最大密度子图要用到前两个知识点。 注意:精度问题,这个题的单调性会出现一段为0的值,所以要用二分逼近最左侧的那个,然后在二分完成后,要用low(左边界)再求一次,这样是最精确的 #in

随风的专栏 2421

poj 3155 Hard Life (最大密度子图)

Hard Life Time Limit: 8000MS   Memory Limit: 65536K Total Submissions: 8595   Accepted: 2497 Case Time Limit: 2000MS   Special Judge Description John is a Chief

clover_hxy的博客 419

POJ-3155-Hard Life(最大密度子图)(01分数规划+最小割)

链接:http://poj.org/problem?id=3155 求最大密度子图, 见论文:算法合集之《最小割模型在信息学竞赛中的应用》 P20-26 //#pragma comment(linker, "/STACK:1024000000,1024000000") #include #include #include #include #include #in

不会吃鱼的喵 462
上一篇: POJ 2396 Budget 有源汇上下界可行流
下一篇: ZOJ 2587 Unique Attack 判断最小割是否唯一
power721
博客等级 码龄18年 176粉丝 135原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值