#9 //[SDOI2017]新生舞会
题解:
分数规划+费用流
常数巨大开o2加inline加register还是不行
我也不知道为什么
代码:
#include <bits/stdc++.h>
using namespace std;
const int N=5e4;
const int N1=2e3;
#define INF 1e9
#define INF2 1e4
#define eps 1e-7
#define rg register
#define IL inline
int pre[N],aa[N],s,t,n,m;
double dis[N];
bool vis[];
int l,p1[N1][N1],p2[N1][N1],head[];
struct re{
int a,b,c,flow,from;
double cost;
}a[N];
IL void arr(int x,int y,int z,int flow,double cost)
{
a[++l].a=head[x];
a[l].b=y;
a[l].c=z;
a[l].flow=flow;
a[l].from=x;
a[l].cost=cost;
head[x]=l;
}
IL bool bellmanford(double &flow,double &cost)
{
queue<int>q;
for (rg int i=;i<=t;i++) dis[i]=INF;
aa[s]=INF;
memset(vis,,sizeof(vis));
q.push(s);
while (!q.empty())
{
rg int x=q.front(); q.pop();
rg int u=head[x];
while (u)
{
rg int v=a[u].b;
if (dis[x]+a[u].cost<dis[v]&&a[u].c>a[u].flow)
{
dis[v]=dis[x]+a[u].cost;
aa[v]=min(aa[x],a[u].c-a[u].flow);
pre[v]=u;
if (vis[v])
{
vis[v]=; q.push(v);
}
}
u=a[u].a;
}
vis[x]=;
}
if (dis[t]==INF) return();
rg int x=t; flow+=aa[t]; cost+=aa[t]*dis[t];
while (pre[x])
{
rg int y=pre[x];
a[y].flow+=aa[t];
if (y%==) a[y+].flow-=aa[t];
else a[y-].flow-=aa[t];
x=a[y].from;
}
return ;
}
double flow,cost;
IL void mincost()
{
while (bellmanford(flow,cost));
}
#define mid (h+t)/2
IL bool check(double x)
{
l=;
memset(head,,sizeof(head));
for (rg int i=;i<=n;i++)
for (rg int j=;j<=n;j++)
{
arr(i,j+n,,,-(p1[i][j]-p2[i][j]*x));
arr(j+n,i,,,(p1[i][j]-p2[i][j]*x));
}
s=,t=*n+;
for (rg int i=;i<=n;i++)
{
arr(,i,,,); arr(i,,,,);
arr(i+n,t,,,); arr(t,i+n,,,);
}
flow=; cost=;
mincost();
if (cost<=) return();
else return();
}
int main()
{
std::ios::sync_with_stdio(false);
cin>>n;
for (rg int i=;i<=n;i++)
for (rg int j=;j<=n;j++)
cin>>p1[i][j];
for (rg int i=;i<=n;i++)
for (rg int j=;j<=n;j++)
cin>>p2[i][j];
double h=,t=INF2;
while (t-h>eps)
{
if (check(mid)) h=mid;
else t=mid;
}
printf("%.6f",h);
return ;
}
#9 //[SDOI2017]新生舞会的更多相关文章
- [Sdoi2017]新生舞会 [01分数规划 二分图最大权匹配]
[Sdoi2017]新生舞会 题意:沙茶01分数规划 貌似\(*10^7\)变成整数更科学 #include <iostream> #include <cstdio> #inc ...
- BZOJ_4819_[Sdoi2017]新生舞会_01分数规划+费用流
BZOJ_4819_[Sdoi2017]新生舞会_01分数规划+费用流 Description 学校组织了一次新生舞会,Cathy作为经验丰富的老学姐,负责为同学们安排舞伴.有n个男生和n个女生参加舞 ...
- 洛谷 P3705 [SDOI2017]新生舞会 解题报告
P3705 [SDOI2017]新生舞会 题目描述 学校组织了一次新生舞会,\(Cathy\)作为经验丰富的老学姐,负责为同学们安排舞伴. 有\(n\)个男生和\(n\)个女生参加舞会买一个男生和一个 ...
- 【BZOJ 4819】 4819: [Sdoi2017]新生舞会 (0-1分数规划、二分+KM)
4819: [Sdoi2017]新生舞会 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 601 Solved: 313 Description 学校 ...
- 【BZOJ4819】[Sdoi2017]新生舞会 01分数规划+费用流
[BZOJ4819][Sdoi2017]新生舞会 Description 学校组织了一次新生舞会,Cathy作为经验丰富的老学姐,负责为同学们安排舞伴.有n个男生和n个女生参加舞会 买一个男生和一个女 ...
- [BZOJ4819][SDOI2017]新生舞会(分数规划+费用流,KM)
4819: [Sdoi2017]新生舞会 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1097 Solved: 566[Submit][Statu ...
- 【算法】01分数规划 --- HNOI2009最小圈 & APIO2017商旅 & SDOI2017新生舞会
01分数规划:通常的问法是:在一张有 \(n\) 个点,\(m\) 条边的有向图中,每一条边均有其价值 \(v\) 与其代价 \(w\):求在图中的一个环使得这个环上所有的路径的权值和与代价和的比率最 ...
- 4819: [Sdoi2017]新生舞会(分数规划)
4819: [Sdoi2017]新生舞会 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1031 Solved: 530[Submit][Statu ...
- 题解:SDOI2017 新生舞会
题解:SDOI2017 新生舞会 Description 学校组织了一次新生舞会,Cathy 作为经验丰富的老学姐,负责为同学们安排舞伴. 有 \(n\) 个男生和 \(n\) 个女生参加舞会.一个男 ...
- bzoj4819 [Sdoi2017]新生舞会
Description 学校组织了一次新生舞会,Cathy作为经验丰富的老学姐,负责为同学们安排舞伴.有n个男生和n个女生参加舞会买一个男生和一个女生一起跳舞,互为舞伴.Cathy收集了这些同学之间的 ...
随机推荐
- 如何使用less(变量,混合,匹配,运算,嵌套...)
如何使用less及一些常用的(变量,混合,匹配,运算,嵌套...) less的介绍及编译工具 什么是less 1.LESSCSS是一种动态样式语言,属于CSS预处理语言的一种,它使用类似CSS的语法, ...
- luogu P2596 [ZJOI2006]书架
传送门 感觉要死在\(Splay\)里了 orz 这题用\(Splay\)维护这个序列,其中的第\(k\)大点代表这个序列的第\(k\)个数 第一个操作,先把那个数所在的点旋到根,然后把整个根的左子树 ...
- POJ3233 Matrix Power Series(快速幂求等比矩阵和)
题面 \(solution:\) 首先,如果题目只要我们求\(A^K\) 那这一题我们可以直接模版矩乘快速幂来做,但是它现在让我们求$\sum_{i=1}^{k}{(A^i)} $ 所以我们思考一下这 ...
- sqlalchemy-查询
User这个类创建的表 User1这个类创建的表 基本查询结果 # 1 查看sql原生语句 rs =session.query(User).filter(User.username=='budon ...
- HashMap、ArrayMap、SparseArray分析比较
http://blog.csdn.net/chen_lifeng/article/details/52057427
- Jetson tk1 刷机后要做的几件事
参考简书文章: http://www.jianshu.com/p/997ede860d74 1. 查看Jetson TK1 L4T版本 head -n 1 /etc/nv_tegra_release ...
- V4L2学习记录【转】
转自:http://blog.chinaunix.net/uid-30254565-id-5637600.html V4L2学习记录 这个还没有分析完,先在这放着,防止电脑坏掉丢了,以后再完善 V4L ...
- java并发编程系列三、Lock和Condition
有了synchronized为什么还要Lock? 因为Lock和synchronized比较有如下优点 1. 尝试非阻塞地获取锁 2. 获取锁的过程可以被中断 3. 超时获取锁 Lock的标准用法 p ...
- centos6.5 nfs实时共享
一.什么时NFS NFS(Network File System)——网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源.在NFS的应用中,NF ...
- python获取当前环境的编码
# coding:gbk import sys import locale def p(f): print '%s.%s(): %s' % (f.__module__, f.__name__, f() ...