题目链接


题目大意:

就是给你一个全排列,现在叫你选出一个子序列sss,使得r(s)l(s)\frac{r(s)}{l(s)}l(s)r(s)​最大?

  1. r(s)r(s)r(s)是这个子序列的逆序对数
  2. l(s)l(s)l(s)是这个子序列的长度
  3. n∈[1,100]n\in[1,100]n∈[1,100]

看到这个分数和n这么小,就不自觉的联想到最大密度子图,但是图是怎么样的呢?

图就是对于任意的i<j&&ai>aji<j\&\&a_i>a_ji<j&&ai​>aj​那么i和j之间就有一条边i和j之间就有一条边i和j之间就有一条边
那么直接跑最大密度子图就好了


#include <bits/stdc++.h>
#define mid ((l + r) >> 1)
#define Lson rt << 1, l , mid
#define Rson rt << 1|1, mid + 1, r
#define ms(a,al) memset(a,al,sizeof(a))
#define log2(a) log(a)/log(2)
#define lowbit(x) ((-x) & x)
#define _for(i,a,b) for( int i = (a); i < (b); ++i)
#define _rep(i,a,b) for( int i = (a); i <= (b); ++i)
#define for_(i,a,b) for( int i = (a); i >= (b); -- i)
#define rep_(i,a,b) for( int i = (a); i > (b); -- i)
#define IOS std::ios::sync_with_stdio(0); cin.tie(0); cout.tie(0)
#define INF 0x3f3f3f3f
#define LLF 0x3f3f3f3f3f3f3f3f
#define f first
#define s second
#define endl '\n'
using namespace std;
const int N = 2e6 + 10, mod = 1e9 + 9;
const int maxn = 100010;
const double eps = 1e-7;
const int EPS = 500 * 500;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> PII;
typedef pair<ll,ll> PLL;
typedef pair<double,double> PDD;
struct node {int to, next;double len;
}e[maxn];
int head[maxn], cnt;
int n, m, s, t;inline void add(int from, int to, double len) {e[cnt] = {to,head[from],len};head[from] = cnt ++;
}int d[maxn],cur[maxn],gap[maxn];int arr[maxn];void bfs()//最短路
{ms(d,0);ms(gap,0);queue<int> q;q.push(t); d[t] = gap[1] = 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(d[v]) continue;q.push(v); d[v] = d[u] + 1;++ gap[d[v]];}}_for(i,0,t+2) cur[i] = head[i];
}double dfs(int u, double flow)
{if(u == t) return flow;double delta = 0, tmp;for(int &i = cur[u]; ~i; i = e[i].next){int v = e[i].to;if(d[u] - 1 != d[v] || e[i].len <= 0) continue;double tmp = dfs(v,min(flow - delta,e[i].len));if(tmp <= eps) continue;e[i].len -= tmp;e[i^1].len += tmp;delta += tmp;if(fabs(delta - flow) < eps) return delta;}--gap[d[u]];if(!gap[d[u]]) d[s] = t + 1;++ gap[++ d[u]];cur[u] = head[u];return delta;
}double get_maxflow() {bfs();double maxFlow = 0;while(d[s] <= t)maxFlow += dfs(s,1e9);return maxFlow;
}PII edge[maxn];inline void build(double Mid) {ms(head,-1);cnt = 0;s = 0, t = n + m + 1;for(int i = 1; i <= m; ++ i) {int u = edge[i].first, v = edge[i].second;add(s,i+n,1);add(i+n,s,0);add(i+n,u,1e9);add(u,i+n,0);add(i+n,v,1e9);add(v,i+n,0);}for(int i = 1; i <= n; ++ i) {add(i,t,Mid);add(t,i,0);}}int main() {IOS;int T;cin >> T;for(int Cas = 1; Cas <= T; ++ Cas) {cin >> n;m = 0;for(int i = 1; i <= n; ++ i) cin >> arr[i];for(int i = 1; i <= n; ++ i) for(int j = i + 1; j <= n; ++ j) if(arr[i] > arr[j]) edge[++ m] = {i,j}; cout << "Case #" << Cas << ": ";if(!m)  cout << "0.0000000\n";else {double l = 1.0/n, r = m;while(r - l > eps) {double Mid = (l + r) / 2;build(Mid);if(1.0 * m - get_maxflow() > eps) l = Mid;else r = Mid;}cout << fixed << setprecision(10) << l << '\n';}}return 0;
}

最大流 ---- 最大密度子图 ----- 2014-2015 ACM-ICPC, Asia Xian Regional Contest C The Problem Needs 3D Arrays相关推荐

  1. 2016 ACM / ICPC Asia dalian Regional Contest 题解(11 / 11)【每日亿题2021 / 2 / 17】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 A .(2017 ACM ICPC dalian H)To begin or not to be ...

  2. 2017 ACM ICPC Asia Shenyang Regional Contest 题解(10 / 13)【每日亿题2 / 16】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 A.(2017 ICPC shenyang I)Little Boxes B.(2017 ICP ...

  3. The 2022 ICPC Asia Xian Regional Contest

    题目顺序大致按照难度排序. F. Hotel 现在酒店中有单人间和双人间,价格分别是c1,c2,现在有n个队,每队三个人,性别分别用字母表示,当两个人性别相同且在同一个队时,他们可以住在双人间中.求最 ...

  4. 2015 ACM/ICPC Asia Regional Shenyang Online题解

    以下所有AC题解程序来自"仙客传奇"团队. AC题数:7/13 ABCFGJL A. Traversal AC的C++语言程序: #include <bits/stdc++. ...

  5. The 2019 ICPC Asia Shanghai Regional Contest

    The 2019 ICPC Asia Shanghai Regional Contest 题号 题目 知识点 A Mr. Panda and Dominoes B Prefix Code C Maze ...

  6. 2018 ICPC Asia Jakarta Regional Contest

    2018 ICPC Asia Jakarta Regional Contest 题号 题目 知识点 难度 A Edit Distance B Rotating Gear C Smart Thief D ...

  7. 【题目记录】——The 2021 ICPC Asia Jinan Regional Contest

    文章目录 C Optimal Strategy 组合数 H Game Coin K Search For Mafuyu 欧拉序列 题目集地址 The 2021 ICPC Asia Jinan Regi ...

  8. 2019-2020 ICPC Asia Xuzhou Regional Contest【徐州现场赛】

    题目: 209-2020 ICPC Asia Xuzhou Regional Onsite Contest E. Multiply 题意: 找到最大的 i 使得 z*x^i 是 y! 的因子 分析: ...

  9. hdu 5444 Elven Postman(根据先序遍历和中序遍历求后序遍历)2015 ACM/ICPC Asia Regional Changchun Online...

    很坑的一道题,读了半天才读懂题,手忙脚乱的写完(套上模板+修改模板),然后RE到死-- 题意: 题面上告诉了我们这是一棵二叉树,然后告诉了我们它的先序遍历,然后,没了--没了! 反复读题,终于在偶然间 ...

最新文章

  1. BZOJ 2111 [ZJOI2010]Perm 排列计数:Tree dp + Lucas定理
  2. 东大19春在线作业计算机应用基础,东大19春学期《计算机应用基础》在线作业2...
  3. js考试题 html5新特性,Web前端初级面试题总结
  4. 记一次redis规模化运维讨论会
  5. git配置服务器版仓库
  6. JUnit中@Test的运行顺序
  7. 一个简单的三层架构例子(.NET入门)
  8. Invalid character found in the request target. The valid characters are defi
  9. 拓端tecdat|Python多项式Logistic逻辑回归进行多类别分类和交叉验证准确度箱线图可视化
  10. 打造全自动的NOD32升级服务器
  11. 2022-2028年中国奶茶店行业竞争策略研究及未来前景展望报告
  12. 校招入职微软的99天
  13. 聚焦“数字中国” | 以“云智原生”为基石,激发数字化创新红利
  14. TCP之快重传与快恢复
  15. UI 自动化的页面对象管理工具之实现思路
  16. 阿里云企业备案需要什么资料?
  17. QQ2012[QQ圈子]功能试用:按照真实生活将好友分圈
  18. 华为数字化转型之道 方法篇 第三章 数字化转型框架
  19. 摒弃盗版,让我们拥有正版,给你最实用的软件。有效的优化
  20. Linux 文件管理 : patch 命令详解

热门文章

  1. 一文带你了解为什么是知识图谱的时代!
  2. 从零开始一起学习SLAM | 掌握g2o顶点编程套路
  3. AIWalker是个什么样的号?为什么要推荐呢?聚焦low-level,关注AI最前沿
  4. 计算机视觉不可能凉!
  5. 干货|python基础知识总结
  6. 毕业BG(01背包问题)
  7. 坑爹的BufferManager
  8. AI犯错谁之过?切勿盲目相信之
  9. react中试用leaflet简单起步
  10. Spring Boot 整合 Mybatis Annotation 注解的完整 Web 案例