POJ 3155 Hard Life 最大密度子图

Python爬虫实战:5分钟搞定东方财富网股票数据抓取(附完整代码) 本文详细介绍了如何利用Python爬虫技术,快速抓取东方财富网的实时股票数据。通过逆向分析其JSONP数据接口,构建了包含请求处理、数据清洗、分页调度及多格式存储的完整自动化采集系统,并提供了应对反爬策略与生产部署的进阶优化思路,附有可直接运行的完整代码。 阅读详情
 
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);
		}
	}


 

15、人工智能社会学:关系视角下的机器相遇 本文探讨了将人工智能视为社会主体的可能性,提出了一种关系视角下的人工智能社会学。通过结合卢西亚娜·帕里西、艾伦·图灵和乔治·赫伯特·米德的理论,强调不确定性在人工智能运行中的核心地位,并分析了人工智能如何通过与社会环境的互动催生新奇性,从而拓展社会学的研究范畴。文章还讨论了人工智能对社会结构和社会互动的影响,以及其作为社会主体所带来的理论和实践意义,为未来人工智能社会学的发展提供了方向。 阅读详情

相关推荐

张正友标定法_单目-线激光三维扫描系统中光刀平面的标定

单目-线激光三维扫描系统中光刀平面的标定线结构光有结构简单、精度高、测速快等特点,被广泛应用于三维重建领域。线结构光三维扫描系统由一个相机和一个线结构光投射器构成,线结构光投射器将线结构光投射到被测物体表面,相机采集带有线激光的被测物体图像,根据相机和线激光投射器间的相对位置关系,使用激光三角法计算出激光线上的点在相机坐标系下的坐标。激光三角法原理如下图所示,线激光投射的扇形区域可以看作是一个平面...

weixin_39616379的博客 1074

最大密度子图

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

harry12138小白的博客 2851

PCL1.12.1+VTK9.1+Qt5.14.2实战:解决QVTKOpenGLNativeWidget点云渲染窗口初始化报错问题

本文针对PCL1.12.1、VTK9.1与Qt5.14.2集成开发中,QVTKOpenGLNativeWidget点云渲染窗口初始化时出现的报错与黑屏问题,提供了深度分析与两种实战解决方案。核心在于理解VTK版本升级导致的渲染窗口类型不匹配,并指导开发者通过显式创建vtkGenericOpenGLRenderWindow或利用窗口ID嵌入,正确初始化并绑定可视化组件,从而稳定实现点云渲染。

weixin_29284657的博客 221

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

内容挺单薄的……

七代目鸽影 1280

Android UI 组件系列(二):Button 进阶用法

在这篇博客中,我们深入探讨了 Button 的进阶用法,重点介绍了如何通过 事件处理 来响应用户的操作,如何使用 自定义样式 来提升按钮的外观,并利用 StateListDrawable 来管理按钮在不同状态下的表现。这些技巧能够帮助你打造更具交互性、视觉吸引力和动态响应的按钮,提升用户体验。

weixin_39339407的博客 1625

高性能优化的本质

在很早之前,处理器性能的提升一般是通过减小元器件的尺寸,增加元器件的数量,提高主频来实现,这也是摩尔定律所说的,但是由于功耗的影响,主频不能一直增加。后来,由于英伟达的GPU的并行计算的出现,逐渐打破摩尔定律,人们利用多核,SIMD,SIMT来处理大量相同计算的数据,这极大的提高了效率。计算机的算力得到了巨大的提升,但是并行是困难的,对于有数据依赖的程序来说,处理并行是一件及其困难的事,但对于一些简单的数学库的计算,并行的实现相对简单。

发狂的小花的博客 274

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

从HCI层浅析LE Audio通话建立流程

本文分析了BLE AUDIO通话协议建立的全过程。当手机来电时,系统会通过CCP EATT链路通知耳机准备通话,并断开原有音乐CIS连接。随后建立通话专用的CIG组,其参数设置(如MAX SDU SIZE=80、RTN=2)与音乐场景明显不同,更注重通话的实时性。文中详细描述了设置ISO数据路径、启用ASE、建立CIS连接等关键步骤,特别指出通话采用Conversational音频上下文类型。最后解析了ISO数据包参数含义,展示了10ms周期、32kHz采样率等通话特性参数。整个过程体现了BLE AUDIO

十多年蓝牙协议软件开发,擅长蓝牙协议分析 1860

POJ Hard Life (最大密度子图)

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

YouthDance 1384

【定位教程2----旋转中心标定之方法一】

【定位教程2----旋转中心标定之方法一】

Quintin 3万+

CDD数据库文件制作(二)——服务配置(0x27)

主要根据诊断调查表,针对0x27服务在CDD中的每一步配置给出详细介绍 1.会话切换配置 1.1.根据诊断调查表进行信息提取 1.2.子功能添加 1.2.1.Level1安全等级1创建 1.2.2.Level3安全等级3创建 1.2.3.安全等级名字查看与修改 1.3.会话切换信息提取(应用程序下) 1.4.会话转换配置(应用程序下) 1.5.会话切换信息提取(引导程序下) 1.6.会话转换配置(引导程序下) 2.安全等级配置信息提取 2.1.安全访问配置(level1) 2.2.安全访问配置(level2

LOVE135149的博客 2930

poj 3155 Hard Life 最大密度子图

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

inf_force 848

openpi 入门教程(一)安装、训练、微调与推理

OpenPI是由物理智能团队发布的机器人开源模型和软件包,包含两种主要模型:基于流的扩散视觉-语言-动作模型(VLA)的π₀模型和基于FAST动作标记器的自回归VLA的π₀-FAST模型。这些模型已在超过10,000小时的机器人数据上进行了预训练,并提供了基础模型检查点,支持开箱即用或根据用户数据集进行微调。OpenPI的实验性质意味着它可能不适用于所有平台,但鼓励研究人员和从业者进行创造性实验。运行这些模型需要至少具备NVIDIA GPU,推荐使用RTX 4090或更高规格的显卡。OpenPI支持在Ubu

2506_90492529的博客 5107

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

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

量子流逝 1028

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

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

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

lyc 1521

NTscan扫描工具

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

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、付费专栏及课程。

余额充值