洛谷3705 [SDOI2017] 新生舞会 【01分数规划】【KM算法】
2024-08-26 03:08:36
题目分析:
裸题。怀疑$ O(n^4log{n}) $跑不过,考虑Edmonds-Karp优化。
代码:
#include<bits/stdc++.h>
using namespace std; const int maxn = ; const double eps = 1e-; int n; int a[maxn][maxn],b[maxn][maxn]; double lx[maxn],ly[maxn],c[maxn][maxn];
int inS[maxn],inT[maxn],Left[maxn];
double slack[maxn]; void read(){
scanf("%d",&n);
for(int i=;i<=n;i++) for(int j=;j<=n;j++) scanf("%d",&a[i][j]);
for(int i=;i<=n;i++) for(int j=;j<=n;j++) scanf("%d",&b[i][j]);
} int match(int now){
inS[now] = ;
for(int i=;i<=n;i++){
if(inT[i]) continue;
if(lx[now]+ly[i] - c[now][i] <= eps){
inT[i] = ;
if(!Left[i] || match(Left[i])){
Left[i] = now;
return true;
}
}else slack[i] = min(slack[i],lx[now]+ly[i]-c[now][i]);
}
return false;
} void update(){
double pp = 1e9;
for(int i=;i<=n;i++) if(!inT[i]) pp = min(pp,slack[i]);
for(int i=;i<=n;i++){
if(inS[i]) lx[i] -= pp;
if(inT[i]) ly[i] += pp;
else slack[i] -= pp;
}
} bool KM(double now){
for(int i=;i<=n;i++) for(int j=;j<=n;j++) c[i][j] = a[i][j]-now*b[i][j];
for(int i=;i<=n;i++) {
lx[i] = -1E9,ly[i] = ; Left[i] = ;
for(int j=;j<=n;j++) lx[i] = max(lx[i],c[i][j]);
}
for(int i=;i<=n;i++){
for(int j=;j<=n;j++) slack[j] = 1e9;
for(;;){
for(int j=;j<=n;j++) inS[j] = inT[j] = ;
if(match(i)) break;
update();
}
}
double ans = ;
for(int i=;i<=n;i++) ans += lx[i] + ly[i];
if(ans <) return false;
else return true;
} double divide(double l,double r){
if(r-l <= eps) return l;
double mid = (l+r)/2.0;
int flag = KM(mid);
if(flag) return divide(mid,r);
else return divide(l,mid);
} int main(){
read();
printf("%.6lf",divide(,1E4));
return ;
}
最新文章
- ionic中的service简单写法
- Jrebel6.3.3破解,配置图文教程
- [ 学习路线 ] 2015 前端(JS)工程师必知必会 (2)
- 【STL】-priority_queue的用法
- V9自定义分页函数
- android 换肤模式总结
- CodeForces - 61E Enemy is weak
- 【题解】P2922 [USACO08DEC]秘密消息Secret Message
- odoo 权限问题
- iOS 开发中字典和字符串的转换
- C#获取本周五日期字符串
- SpringBoot无废话入门03:SpringMVC支持
- python核心类库:urllib使用详解
- CSS多行文字垂直居中的两种方法
- webpack实现“热更新”和“热加载”(webpack3.6新增)
- ros service
- POJ 3261 Milk Patterns 【后缀数组 最长可重叠子串】
- html几种美丽的分割线
- Java加载jar文件并调用jar文件当中有参数和返回值的方法
- SI - 系统 - 操作系统简述 (Operating System)
热门文章
- Jmeter(三十七)循环控制器+交替控制器+事务控制器 完美实现接口字段参数化校验
- 解决CPC撰写文档报错问题“无法获取“AxforApplication”控件的窗口句柄。不支持无窗口的 ActiveX 控件”
- BZOJ1969 航线规划
- Sampling Matrix
- 1060D Social Circles(贪心)
- Chrome 浏览器的简单设置 无痕模式 暗黑模式 自定义用户目录
- Kettle中表输出字段和字段选择
- Python的web编程
- linux 地址解析协议 arp
- freemarker -include