https://cn.vjudge.net/problem/Gym-101492I

如果用单个点代表每个区间 利用拆点来限制区间的流量的话 点是 n^2/2+m个 边是2*n^2条

但是这样会T

解法1:单纯形

单纯形套板可以过

#include <bits/stdc++.h>
#define N
using namespace std; typedef unsigned ui;
typedef long double dbl; const dbl eps = 1e-; ui n, m, c[]; dbl a[][], x[], z; int dcmp(dbl d) { return d < -eps ? - : d <= eps ? : ; } // u in, v out
void pivot(ui u, ui v) {
swap(c[n + u], c[v]);
// row u *= 1 / a[u][v]
dbl k = a[u][v]; a[u][v] = ;
for (ui j = ; j <= n; ++j) a[u][j] /= k;
for (ui i = ; i <= m; ++i) {
if (i == u || !dcmp(a[i][v])) continue;
k = a[i][v]; a[i][v] = ;
for (ui j = ; j <= n; ++j)
a[i][j] -= a[u][j] * k;
}
} bool init() {
for (ui i = ; i <= n; ++i) c[i] = i;
while () {
ui u = , v = ;
for (ui i = ; i <= m; ++i)
if (dcmp(a[i][]) == - && (!u || dcmp(a[u][] - a[i][]) == )) u = i;
if (!u) return ;
for (ui j = ; j <= n && !v; ++j)
if (dcmp(a[u][j]) == -) v = j;
if (!v) return ;
pivot(u, v);
}
} int simplex() {
if (!init()) return ;
else while () {
ui u = , v = ;
for (ui j = ; j <= n; ++j)
if (dcmp(a[][j]) == && (!v || a[][j] > a[][v])) v = j; if (!v) {
z = -a[][];
for (ui i = ; i <= m; ++i)
x[c[n + i]] = a[i][];
return ;
} dbl w = 1e20;
for (ui i = ; i <= m; ++i)
if (dcmp(a[i][v]) == &&
dcmp(w - a[i][] / a[i][v]) == ) {
w = a[i][] / a[i][v];
u = i;
}
if (!u) return ;
pivot(u, v);
}
} int main(void) {
ios::sync_with_stdio(); cin.tie();
#ifndef ONLINE_JUDGE
ifstream cin("1.in");
#endif
ui t;
cin >> n >> m;
for (ui j = ; j <= n; ++j) cin >> a[][j];
for (ui i = ; i <= m; ++i) {
int l, r; cin >> l >> r;
for (int j = l; j <= r; ++j)
a[i][j] = ;
cin >> a[i][];
} int res = simplex();
if (res == ) cout << "Infeasible" << endl;
else if (res == ) cout << "Unbounded" << endl;
else {
cout << (long long)z << endl;
}
return ;
}

解法2:网络流

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<queue>
#include<stack>
#include<vector>
#include<string.h>
#include<string>
#include<stdlib.h>
#define inf 0x3f3f3f3f
typedef long long ll;
using namespace std;
const int maxn=;
const int maxm=;
struct node
{
int t,f,c,next;
}e[maxm*];
int a[maxn];
int head[maxn],dis[maxn],vis[maxn];
int pre[maxn];
int cnt,s,t;
void add(int s,int t,int c,int f)
{
e[cnt].t=t;
e[cnt].c=c;
e[cnt].f=f;
e[cnt].next=head[s];
head[s]=cnt++;
e[cnt].t=s;
e[cnt].c=;
e[cnt].f=-f;
e[cnt].next=head[t];
head[t]=cnt++;
}
void intt()
{
cnt=;
s=;t=;
memset(head,-,sizeof(head));
}
int spfa()
{
queue<int >que;
for(int i=;i<maxn;i++)
{
dis[i]=inf;
vis[i]=;
pre[i]=-;
}
dis[s]=;
vis[s]=;
que.push(s);
while(que.size())
{
int u=que.front();
que.pop();
vis[u]=;
for(int i=head[u];i!=-;i=e[i].next)
{
int v=e[i].t;
if(e[i].c>&&dis[u]+e[i].f<dis[v])
{
dis[v]=dis[u]+e[i].f;
pre[v]=i;
if(vis[v]==)
{
vis[v]=;
que.push(v);
}
}
}
}
if(pre[t]==-)return ;
return ;
}
ll mincost()
{
int flow=;
ll cost=;
while(spfa())
{
int tf=inf;
for(int i=pre[t];i!=-;i=pre[e[i^].t])
tf=min(e[i].c,tf);
flow+=tf;
for(int i=pre[t];i!=-;i=pre[e[i^].t])
{
e[i].c-=tf;
e[i^].c+=tf;
cost+=1ll*e[i].f*tf;
}
}
return cost;
}
int main()
{
int n,m;
scanf("%d%d",&n,&m);
memset(a,,sizeof(a));
for(int i=;i<=n;i++)
scanf("%d",&a[i]);
intt();
for(int i=;i<=m;i++)
{
int u,v,k;
scanf("%d%d%d",&u,&v,&k);
add(u,v+,inf,k);
}
for(int i=n+;i>=;i--)
add(i,i-,inf,);
for(int i=n+;i>=;i--)
{
int temp=a[i]-a[i-];
if(temp<)
{
add(i,t,-temp,);
}
else add(s,i,temp,);
}
printf("%lld\n",mincost());
}

转载自https://blog.csdn.net/dhydye/article/details/80515359 不懂原理QAQ

Gym - 101492I 区间限制费用流的更多相关文章

  1. codeforces gym 100357 I (费用流)

    题目大意 给出一个或与表达式,每个正变量和反变量最多出现一次,询问是否存在一种方案使得每个或式中有且仅有一个变量的值为1. 解题分析 将每个变量拆成三个点x,y,z. y表示对应的正变量,z表示对应的 ...

  2. Codeforces Gym 100002 E "Evacuation Plan" 费用流

    "Evacuation Plan" Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/10 ...

  3. Codeforces Gym 101190M Mole Tunnels - 费用流

    题目传送门 传送门 题目大意 $m$只鼹鼠有$n$个巢穴,$n - 1$条长度为$1$的通道将它们连通且第$i(i > 1)$个巢穴与第$\left\lfloor \frac{i}{2}\rig ...

  4. 2013-2014 ACM-ICPC, NEERC, Southern Subregional Contest Problem I. Plugs and Sockets 费用流

    Problem I. Plugs and Sockets 题目连接: http://www.codeforces.com/gym/100253 Description The Berland Regi ...

  5. hdu-5988 Coding Contest(费用流)

    题目链接: Coding Contest Time Limit: 2000/1000 MS (Java/Others)     Memory Limit: 65536/65536 K (Java/Ot ...

  6. POJ2195 Going Home[费用流|二分图最大权匹配]

    Going Home Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 22088   Accepted: 11155 Desc ...

  7. BZOJ3130: [Sdoi2013]费用流[最大流 实数二分]

    3130: [Sdoi2013]费用流 Time Limit: 10 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 960  Solved: 5 ...

  8. 洛谷 1004 dp或最大费用流

    思路: dp方法: 设dp[i][j][k][l]为两条没有交叉的路径分别走到(i,j)和(k,l)处最大价值. 则转移方程为 dp[i][j][k][l]=max(dp[i-1][j][k-1][l ...

  9. Codeforces 730I [费用流]

    /* 不要低头,不要放弃,不要气馁,不要慌张 题意: 给两行n个数,要求从第一行选取a个数,第二行选取b个数使得这些数加起来和最大. 限制条件是第一行选取了某个数的条件下,第二行不能选取对应位置的数. ...

随机推荐

  1. Leetcode之分治法专题-654. 最大二叉树(Maximum Binary Tree)

    Leetcode之分治法专题-654. 最大二叉树(Maximum Binary Tree) 给定一个不含重复元素的整数数组.一个以此数组构建的最大二叉树定义如下: 二叉树的根是数组中的最大元素. 左 ...

  2. MongoDB安装与配置问题

    MongoDB相关 通常我们在不同情境下使用不同的数据存储方式.如果仅仅用来存储测试用的数据,推荐使用TXT CSV格式的文件,因为这两种格式的读写都非常方便, 可以很快的打开文件查看当TXT CSV ...

  3. Debezium系列随笔

    0.Debezium简介 1.Run Debezium for Mysql in docker step by step 2.Run Debezium for SQLServer in docker ...

  4. leetcode548 Split Array with Equal Sum

    思路: 使用哈希表降低复杂度.具体来说: 枚举j: 枚举i,如果sum[i - 1] == sum[j - 1] - sum[i],就用哈希表把sum[i - 1]记录下来: 枚举k,如果sum[k ...

  5. 执行sudo命令时command not found的解决办法

    问题的原因: 在编译sudo包的时候默认开启了- -with-secure-path选项. 方法1: sudo vim /etc/sudoers,并在文件内增加这么一行:Defaults secure ...

  6. PYTHON 100days学习笔记008-4:错误和异常

    目录 Day008_04:python错误和异常 1.语法错误 2.异常 3.异常处理 4.抛出异常 5.用户自定义异常 6.定义清理行为 7.预定义的清理行为 参考文章: python3错误和异常 ...

  7. 使用dockerfile 搭建django系统(nginx+redis+mongodb+celery)

    背景 有需求需要对django系统进行docker化,以达到灵活部署和容灾.该系统基于django 2.2版本开发,数据库采用mongodb,服务器使用nginx,因系统有部分异步任务,异步任务则采用 ...

  8. django API返回中文乱码

    renturn HttpResponse(json.dumps(data,ensure_ascii=False))

  9. vue 安装插件

    import VueClipboard from 'vue-clipboard2' import MessagePlugin from '../message' import * as filters ...

  10. C++性能榨汁机之无锁编程

    C++性能榨汁机之无锁编程 来源 http://irootlee.com/juicer_lock_free/ 前言 私以为个人的技术水平应该是一个螺旋式上升的过程:先从书本去了解一个大概,然后在实践中 ...