POJ 3155Hard Life(最大密度子图)】的更多相关文章

论文出处:最小割模型在信息学竞赛终的应用 #include <iostream> #include <cstdio> #include <cstring> #include <queue> #include <algorithm> using namespace std; ; const int inf = 0x3f3f3f3f; + ; + ; struct edge{ int to, next; double w; } ed[maxe*];…
http://poj.org/problem?id=3155 最大密度子图和最大权闭合图性质很相近(大概可以这么说吧),一个是取最多的边一个是取最多有正贡献的点,而且都是有选一种必须选另一种的限制,一个是选边必须选其两边的点,一个是选正权点必须选其相邻的负权点. 那么就可以把最大密度子图用最大权闭合图相近的方式写,二分+网络流就可以了,网络流建图方法可以参考我上一篇博客. https://blog.csdn.net/power721/article/details/6781518 也就是该博客的…
Hard Life Time Limit: 8000MS   Memory Limit: 65536K Total Submissions: 9012   Accepted: 2614 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…
裸题.输入一个无向图,输出最大密度子图(输出子图结点数和升序编号). 看了<最小割模型在信息学竞赛中的应用——胡伯涛>的一部分,感觉01分数规划问题又是个大坑.暂时还看不懂. 参考http://blog.csdn.net/power721/article/details/6781518 构图: 把原图中的无向边转换成两条有向边,容量为1. 设一源点,连接所有点,容量为U(取m). 设一汇点,所有点连接汇点,容量为 U+2g-dv . 二分枚举最大密度g,其中dv为v的度. 判断(U*n-Max…
思路: 这个还是看的胡伯涛的论文<最小割在信息学竞赛中的应用>.是将最大密度子图问题转化为了01分数规划和最小割问题. 直接上代码: #include <iostream> #include <stdio.h> #include <string.h> #include <algorithm> #include <vector> #define Maxn 6010 #define Maxm 200000 #define LL doubl…
题目链接 题意 给出n个人,和m对有冲突的人.要裁掉一些人,使得冲突率最高,冲突率为存在的冲突数/人数. 思路 题意可以转化为,求出一些边,使得|E|/|V|最大,这种分数规划叫做最大密度子图. 学习 建图 对于每个边,依赖于点,可以转化为最大权闭合子图来求解. 最大密度子图: max(|E|/|V|) 分数规划 k = |E|/|V| h(g) = E - V * g 边依赖于点 转化为最大权闭合图 二分点权即g h(g)为递减函数 当h(g) < 0,不合法,要减小g 当h(g) > 0,…
  题意:最大密度子图 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> using namespace std; ,M=,INF=1e9; ; inline int read(){ ,f=; ; c=getchar();} +c-'; c=getchar();} return x*f; } int n,m,u[N],…
求最大密度子图 记得在最后一次寻找的时候记得将进入的边放大那么一点点,这样有利于当每条边都满流的情况下会选择点 #include <iostream> #include <algorithm> #include <string.h> #include <cstdio> #include <vector> #include <queue> #include <cmath> using namespace std; ; con…
晕,m=0是要输出1(弄的我还找管理员要数据,但明显题意是叫我们输出0呀) 最大密度子图,把边转换成点,然后二分答案,跑最大权闭合子图判定是否可行. #include <cstdio> #include <cstring> #include <vector> #include <algorithm> #define N 1110 #define oo 0x3f3f3f3f using namespace std; struct Edge { int u, v…
点边都带权的最大密度子图,且会有必须选的点. 求\(\frac{\sum w_e}{k*(2n-k)}\)的最大值,其中k为子图点数 设\[h(g) = \sum w_e - g*(2nk-k^2)\] 假设最优解为\(g*\),则当\(g<g*\)时,\(h(g)>0\);\(g>g*时,h(g)<0\),以此判断条件二分搜索. 但是\((2nk-k^2)\)不能直接转化为点权,需要做点改变. \[\sum w_e - g*2nk+g*k^2 = \sum w_e + \frac…