最大流 ---- 最大密度子图 ----- 2014-2015 ACM-ICPC, Asia Xian Regional Contest C The Problem Needs 3D Arrays
题目链接
题目大意:
就是给你一个全排列,现在叫你选出一个子序列sss,使得r(s)l(s)\frac{r(s)}{l(s)}l(s)r(s)最大?
- r(s)r(s)r(s)是这个子序列的逆序对数
- l(s)l(s)l(s)是这个子序列的长度
- 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相关推荐
- 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 ...
- 2017 ACM ICPC Asia Shenyang Regional Contest 题解(10 / 13)【每日亿题2 / 16】
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 A.(2017 ICPC shenyang I)Little Boxes B.(2017 ICP ...
- The 2022 ICPC Asia Xian Regional Contest
题目顺序大致按照难度排序. F. Hotel 现在酒店中有单人间和双人间,价格分别是c1,c2,现在有n个队,每队三个人,性别分别用字母表示,当两个人性别相同且在同一个队时,他们可以住在双人间中.求最 ...
- 2015 ACM/ICPC Asia Regional Shenyang Online题解
以下所有AC题解程序来自"仙客传奇"团队. AC题数:7/13 ABCFGJL A. Traversal AC的C++语言程序: #include <bits/stdc++. ...
- The 2019 ICPC Asia Shanghai Regional Contest
The 2019 ICPC Asia Shanghai Regional Contest 题号 题目 知识点 A Mr. Panda and Dominoes B Prefix Code C Maze ...
- 2018 ICPC Asia Jakarta Regional Contest
2018 ICPC Asia Jakarta Regional Contest 题号 题目 知识点 难度 A Edit Distance B Rotating Gear C Smart Thief D ...
- 【题目记录】——The 2021 ICPC Asia Jinan Regional Contest
文章目录 C Optimal Strategy 组合数 H Game Coin K Search For Mafuyu 欧拉序列 题目集地址 The 2021 ICPC Asia Jinan Regi ...
- 2019-2020 ICPC Asia Xuzhou Regional Contest【徐州现场赛】
题目: 209-2020 ICPC Asia Xuzhou Regional Onsite Contest E. Multiply 题意: 找到最大的 i 使得 z*x^i 是 y! 的因子 分析: ...
- hdu 5444 Elven Postman(根据先序遍历和中序遍历求后序遍历)2015 ACM/ICPC Asia Regional Changchun Online...
很坑的一道题,读了半天才读懂题,手忙脚乱的写完(套上模板+修改模板),然后RE到死-- 题意: 题面上告诉了我们这是一棵二叉树,然后告诉了我们它的先序遍历,然后,没了--没了! 反复读题,终于在偶然间 ...
最新文章
- BZOJ 2111 [ZJOI2010]Perm 排列计数:Tree dp + Lucas定理
- 东大19春在线作业计算机应用基础,东大19春学期《计算机应用基础》在线作业2...
- js考试题 html5新特性,Web前端初级面试题总结
- 记一次redis规模化运维讨论会
- git配置服务器版仓库
- JUnit中@Test的运行顺序
- 一个简单的三层架构例子(.NET入门)
- Invalid character found in the request target. The valid characters are defi
- 拓端tecdat|Python多项式Logistic逻辑回归进行多类别分类和交叉验证准确度箱线图可视化
- 打造全自动的NOD32升级服务器
- 2022-2028年中国奶茶店行业竞争策略研究及未来前景展望报告
- 校招入职微软的99天
- 聚焦“数字中国” | 以“云智原生”为基石,激发数字化创新红利
- TCP之快重传与快恢复
- UI 自动化的页面对象管理工具之实现思路
- 阿里云企业备案需要什么资料?
- QQ2012[QQ圈子]功能试用:按照真实生活将好友分圈
- 华为数字化转型之道 方法篇 第三章 数字化转型框架
- 摒弃盗版,让我们拥有正版,给你最实用的软件。有效的优化
- Linux 文件管理 : patch 命令详解