【牛客网】Whalyzh's Problem

每个\(b_{i,j}\)建一个点,认为选了\(b_{i,j}\)一定会选\(a_{i}\)和\(a_{j}\)

选了\(a_{i}\)的话会带了一个\(-b_{i,i}\)的价值

然后再用01分数规划二分答案,选了\(a_{i}\)还会带来\(-x\)的代价,x是二分的答案

如果正数值减最大流大于0认为这个答案可以达到

#include <bits/stdc++.h>
#define fi first
#define se second
#define pii pair<int,int>
#define mp make_pair
#define pb push_back
#define space putchar(' ')
#define enter putchar('\n')
#define eps 1e-10
#define ba 47
#define MAXN 200005
//#define ivorysi
using namespace std;
typedef long long int64;
typedef unsigned int u32;
typedef double db;
template<class T>
void read(T &res) {res = 0;T f = 1;char c = getchar();while(c < '0' || c > '9') {if(c == '-') f = -1;c = getchar();}while(c >= '0' && c <= '9') {res = res * 10 +c - '0';c = getchar();}res *= f;
}
template<class T>
void out(T x) {if(x < 0) {x = -x;putchar('-');}if(x >= 10) {out(x / 10);}putchar('0' + x % 10);
}
struct node {int to,next;db cap;
}E[MAXN * 2];
int N,Ncnt,S,T;
int b[105][105],id[105][105];
int head[20005],sumE = 1,cur[20005];
void add(int u,int v,db c) {E[++sumE].to = v;E[sumE].next = head[u];E[sumE].cap = c;head[u] = sumE;
}
void addtwo(int u,int v,db c) {add(u,v,c);add(v,u,0);
}
int dis[20005];
queue<int> Q;
bool BFS() {memset(dis,0,sizeof(dis));while(!Q.empty()) Q.pop();Q.push(S);dis[S] = 1;while(!Q.empty()) {int u = Q.front();Q.pop();for(int i = head[u] ; i ; i = E[i].next) {int v = E[i].to;if(E[i].cap > 1e-6 && !dis[v]) {dis[v] = dis[u] + 1;if(v == T) return true;Q.push(v);}}}return false;
}
db dfs(int u,db aug) {if(u == T) return aug;for(int &i = cur[u] ; i ; i = E[i].next) {int v = E[i].to;if(E[i].cap > 1e-6 && dis[v] == dis[u] + 1) {db t = dfs(v,min(aug,E[i].cap));if(t > 1e-6) {E[i].cap -= t;E[i ^ 1].cap += t;return t;}}}return 0;
}
db Dinic() {db res = 0;while(BFS()) {for(int i = 1 ; i <= Ncnt ; ++i) cur[i] = head[i];while(db d = dfs(S,1e9) && d > 1e-6) res += d;}return res;
}
bool check(db x) {db res = 0;memset(head,0,sizeof(head));sumE = 1;for(int i = 1 ; i <= N ; ++i) {for(int j = 1 ; j <= N ; ++j) {addtwo(S,id[i][j],b[i][j]);res += b[i][j];addtwo(id[i][j],i,1e9);addtwo(id[i][j],j,1e9);}}for(int i = 1 ; i <= N ; ++i) {addtwo(i,T,b[i][i] + x);}return res - Dinic() > 1e-6;
}
void Solve() {read(N);Ncnt = N;for(int i = 1 ; i <= N ; ++i) {for(int j = 1 ; j <= N ; ++j) {read(b[i][j]);id[i][j] = ++Ncnt;}}S = ++Ncnt;T = ++Ncnt;db L = 0.0,R = 1e5;int cnt = 50;while(cnt--) {db mid = (L + R) / 2.0;if(check(mid)) L = mid;else R = mid;}printf("%.5lf\n",L);
}
int main(){
#ifdef ivorysifreopen("f1.in","r",stdin);
#endifint T;read(T);for(int i = 1 ; i <= T ; ++i) Solve();return 0;
}

转载于:https://www.cnblogs.com/ivorysi/p/11062818.html

【牛客网】Whalyzh's Problem相关推荐

  1. 链接:https://ac.nowcoder.com/acm/problem/22228来源:牛客网题目描述 在给定的数组中删除一个数。输入描述:多组测试。每组第一行输入1个整数n(n

    链接:登录-专业IT笔试面试备考平台_牛客网 来源:牛客网 题目描述 在给定的数组中删除一个数. 输入描述: 多组测试. 每组第一行输入1个整数n(n<20), 第二行输入n个整数 第三行输入1 ...

  2. 牛客网获取输入rowinput_Python爬虫入门例题:抓取牛客网题目

    最近做题的时候要写一些题解,在把牛客网的题目复制下来的时候,数学公式的处理比较麻烦,所以我用Python的selenium.urllib.request和BeautifulSoup4库对题目信息进行了 ...

  3. 牛客网题目——替换空格

    牛客网题目--替换空格 题目描述 请实现一个函数,将一个字符串中的每个空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20 ...

  4. 树的距离(牛客网树上主席树+dfs序)

    链接:https://ac.nowcoder.com/acm/problem/14415 来源:牛客网 题目描述 wyf非常喜欢树.一棵有根数树上有N个节点,1号点是他的根,每条边都有一个距离,而wy ...

  5. 黑白树(牛客网+树形dp)

    链接:https://ac.nowcoder.com/acm/problem/13249 来源:牛客网 题目描述 一棵n个点的有根树,1号点为根,相邻的两个节点之间的距离为1.树上每个节点i对应一个值 ...

  6. codeforces(牛客网dp专题,排序)

    链接:https://ac.nowcoder.com/acm/problem/21314 来源:牛客网 牛牛正在打一场CF 比赛时间为T分钟,有N道题,可以在比赛时间内的任意时间提交代码 第i道题的分 ...

  7. 牛客网【每日一题】3月27日 数学考试

    题号 NC15553 名称 数学考试 来源 2018年长沙理工大学第十三届程序设计竞赛 链接:https://ac.nowcoder.com/acm/problem/15553 来源:牛客网 试题传送 ...

  8. 洛谷、牛客网、AcWing 刷题(python版)

    牛客网python专项练习整理(一) https://blog.csdn.net/weixin_41913008/article/details/87203468 牛客网剑指offer--python ...

  9. 牛客网 15029 (栈)

    链接:https://ac.nowcoder.com/acm/problem/15029 来源:牛客网 小鱼儿吐泡泡,嘟嘟嘟冒出来.小鱼儿会吐出两种泡泡:大泡泡"O",小泡泡&qu ...

  10. 牛客网暑期ACM多校训练营(第十场)D Rikka with Prefix Sum

    链接:https://www.nowcoder.com/acm/contest/148/D 来源:牛客网 题目描述 Prefix Sum is a useful trick in data struc ...

最新文章

  1. NanodetPlus网络结构
  2. java中Array和ArrayList区别 可以将 ArrayList想象成一种会自动扩增容量的Array
  3. Javascript 严格模式详解
  4. CDS view里case - when - else关键字的用法
  5. 2020蓝桥杯省赛---java---B---2(寻找 2020)+测试txt
  6. 使用C和汇编实现一个加法操作
  7. 华强北耳机版本太多,不知道如何选购?
  8. 基于CentOS7,MySQL5.7的高可用MHA架构搭建实战
  9. 王国权辞任中国电信股份有限公司执行副总裁
  10. 关于.NET的单元测试
  11. 中国近红外成像行业市场供需与战略研究报告
  12. matlab中求雅克比矩阵的方法及cov函数的用法,协方差矩阵—Hessian矩阵—正定矩阵
  13. 遇见逆水寒如何在电脑上玩 遇见逆水寒模拟器玩法教程
  14. [转]KSN报告:2014 - 2016年的PC勒索软件
  15. 深度学习 - 生成对抗网络
  16. python计算log2×_带有Python示例的math.log2()方法
  17. 数学三次危机(四)第一次数学危机
  18. centos 5.2自动安装的php不支持mysql?
  19. C语言GUI编程之数字记忆游戏——项目构建
  20. java使用world模板动态生成PDF文件

热门文章

  1. 七牛云 rs.php 没有,设置了callbackUrl,七牛只是在客户端上打印了json格式的key和hash,居然没有按照设置跳转回来..怎么弄?...
  2. erc20钱包下载_DREP IOS客户端上线|支持BTC/DREP及所有ERC20通证,云端钱包功能
  3. 未能写入输出文件拒绝访问
  4. 《高级无线网络—4G技术》——2.3 正交频分复用
  5. I.MX6 make menuconfig进入x86模式
  6. 如何使用迅雷下载电骡的资源
  7. Oracle技术之SYS用户对象不支持延迟段
  8. Word(六)-强大的“邮件合并”(2)
  9. WinForm程序设计-ToolTip控件
  10. 【车道线检测与寻迹】【实践】4月17 线车位的实验思路与后续工作构想