【BZOJ4819】[Sdoi2017]新生舞会 01分数规划+费用流
【BZOJ4819】[Sdoi2017]新生舞会
Description
Input
Output
Sample Input
19 17 16
25 24 23
35 36 31
9 5 6
3 4 2
7 8 9
Sample Output
题解:正常的01分数规划步骤是,先二分答案r,然后将所有点的权值变成a[i]-r*b[i],取最大的k个数,如果最大的k个a[i]-r*b[i]的和>0,说明答案还可以更优,调整下界;否则调整上界
对于本题来说,我们不能直接排序取前n大,因此需要跑流量为n的最大费用流,如果总费用>0,则说明答案可以更优
(最大费用流不用说了吧?将边的费用取相反数,然后跑最小费用流)
#include <cstdio>
#include <cstring>
#include <iostream>
#include <queue>
using namespace std;
int n,cnt,ans;
double sum;
int inq[210],head[210],next[100000],to[100000],flow[100000],re[210],rv[210];
double dis[210],cost[100000];
int A[110][110],B[110][110];
queue<int> q;
void add(int a,int b,double c)
{
to[cnt]=b,cost[cnt]=-c,flow[cnt]=1,next[cnt]=head[a],head[a]=cnt++;
to[cnt]=a,cost[cnt]=c,flow[cnt]=0,next[cnt]=head[b],head[b]=cnt++;
}
int bfs()
{
int i,u;
for(i=1;i<=2*n+1;i++) dis[i]=9999999;
dis[0]=0,q.push(0);
while(!q.empty())
{
u=q.front(),q.pop(),inq[u]=0;
for(i=head[u];i!=-1;i=next[i])
{
if(flow[i]&&dis[to[i]]>dis[u]+cost[i])
{
dis[to[i]]=dis[u]+cost[i];
re[to[i]]=i,rv[to[i]]=u;
if(!inq[to[i]]) inq[to[i]]=1,q.push(to[i]);
}
}
}
return dis[2*n+1]<9999999-1e-8;
}
bool solve(double sta)
{
memset(head,-1,sizeof(head));
int i,j;
cnt=0,sum=0;
for(i=1;i<=n;i++)
{
add(0,i,0),add(i+n,2*n+1,0);
for(j=1;j<=n;j++) add(i,j+n,(double)A[i][j]-sta*B[i][j]);
}
while(bfs())
{
sum+=dis[2*n+1];
for(i=2*n+1;i;i=rv[i]) flow[re[i]]--,flow[re[i]^1]++;
}
return sum<-1e-8;
}
int main()
{
scanf("%d",&n);
int i,j,maxx;
double l=0,r=0,mid;
for(i=1;i<=n;i++)
{
maxx=0;
for(j=1;j<=n;j++)
{
scanf("%d",&A[i][j]);
maxx=max(maxx,A[i][j]);
}
r+=maxx;
}
for(i=1;i<=n;i++) for(j=1;j<=n;j++) scanf("%d",&B[i][j]);
while(r>=l+1e-8)
{
mid=(l+r)/2;
if(solve(mid)) l=mid;
else r=mid;
}
printf("%.6f",l);
return 0;
}
【BZOJ4819】[Sdoi2017]新生舞会 01分数规划+费用流的更多相关文章
- P3705 [SDOI2017]新生舞会 01分数规划+费用流
$ \color{#0066ff}{ 题目描述 }$ 学校组织了一次新生舞会,Cathy作为经验丰富的老学姐,负责为同学们安排舞伴. 有\(n\)个男生和\(n\)个女生参加舞会买一个男生和一个女生一 ...
- BZOJ.4819.[SDOI2017]新生舞会(01分数规划 费用流SPFA)
BZOJ 洛谷 裸01分数规划.二分之后就是裸最大费用最大流了. 写的朴素SPFA费用流,洛谷跑的非常快啊,为什么有人还T成那样.. 当然用二分也很慢,用什么什么迭代会很快. [Update] 19. ...
- BZOJ_4819_[Sdoi2017]新生舞会_01分数规划+费用流
BZOJ_4819_[Sdoi2017]新生舞会_01分数规划+费用流 Description 学校组织了一次新生舞会,Cathy作为经验丰富的老学姐,负责为同学们安排舞伴.有n个男生和n个女生参加舞 ...
- BZOJ-4819: 新生舞会(01分数规划+费用流)
Description 学校组织了一次新生舞会,Cathy作为经验丰富的老学姐,负责为同学们安排舞伴.有n个男生和n个女生参加舞会 买一个男生和一个女生一起跳舞,互为舞伴.Cathy收集了这些同学之间 ...
- BZOJ4819: [Sdoi2017]新生舞会(01分数规划)
Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1029 Solved: 528[Submit][Status][Discuss] Descripti ...
- [Sdoi2017]新生舞会(分数规划+费用流)
题解:二分答案mid,然后将每个位置看成a-b*mid,然后由于是n个男生和n个女生匹配,每个人搭配一个cp,于是有点类似于https://www.lydsy.com/JudgeOnline/prob ...
- [Sdoi2017]新生舞会 [01分数规划 二分图最大权匹配]
[Sdoi2017]新生舞会 题意:沙茶01分数规划 貌似\(*10^7\)变成整数更科学 #include <iostream> #include <cstdio> #inc ...
- 【BZOJ4819】新生舞会(分数规划,网络流)
[BZOJ4819]新生舞会(分数规划,网络流) 题面 BZOJ Description 学校组织了一次新生舞会,Cathy作为经验丰富的老学姐,负责为同学们安排舞伴.有n个男生和n个女生参加舞会 买 ...
- BZOJ4819 [Sdoi2017]新生舞会 【01分数规划 + 费用流】
题目 学校组织了一次新生舞会,Cathy作为经验丰富的老学姐,负责为同学们安排舞伴.有n个男生和n个女生参加舞会 买一个男生和一个女生一起跳舞,互为舞伴.Cathy收集了这些同学之间的关系,比如两个人 ...
随机推荐
- MFC显示GIF动画图片
本帖则将讨论如何在MFC的对话框里显示GIF动画图片.一些关于传统控件的美化方法正在研究当中会陆续发帖的. 这是本帖用到的一个VS2008例程. 附件 GifPicture.rar (138.1 ...
- MySQL主从不一致的几种故障总结分析、解决和预防
(1).主从不一致故障,从库宕机,从库启动后重复写入数据报错解决与预防:relay_log_info_repository=TABLE(InnoDB)参数解释说明:若relay_log_info_re ...
- 【剑指Offer学习】【面试题22:栈的压入、弹出序列】
题目:输入两个整数序列,第一个序列表示栈的压入顺序,请推断二个序列是否为该栈的弹出顺序.假设压入栈的全部数字均不相等. 解题思路: 解决问题非常直观的想法就是建立一个辅助栈.把输入的第一个序列中的数字 ...
- TIME_WAIT详解
1.TCP四次挥手关闭链接过程 2.TIME_WAIT的产生条件主动关闭方在发送四次挥手的最后一个ACK会变为TIME_WAIT状态,保留此状态的时间为两个MSL 3.TIME_WAIT两个MSL的作 ...
- Mac里面如何设置自启动服务
Mac OS x 启动项设置 Mac OS X的启动原理: 1,mac固件激活,初始化硬件,加载BootX引导器. 2,BootX加载内核与内核扩展(kext). 3,内核启动launchd进程. 4 ...
- JDK默认使用的垃圾回收器
查看方法java -XX:+PrintCommandLineFlags -version 引用<深入理解Java虚拟机:JVM高级特性与最佳实践>的介绍: 所以,jdk8环境下,默认使用 ...
- Win7-U盘安装出现"We were unable to copy your files. "
使用Windows 7 USB/DVD Download Tool时,提示We were unable to copy your files. Please check your USB device ...
- hdu1142(dj+记忆化搜索)
题意:给你n各点,m行关于这些点的联通关系,以及距离,求从1这个点到2这个点之间,下一个点到2这个点比当前点到2这个点的距离要小的路径的条数...... 思路:dj+记忆化搜索....... #inc ...
- EmWebAdmin 导航栏分析
templates/gentelella/base.tpl <!DOCTYPE html> <html lang="en"> <!-- Smarty ...
- 应有dataGridView控件
using System.Data.SqlClient; namespace UseDataGridView { public partial class Form1 : Form { public ...