【bzoj1520】[POI2006]Szk-Schools 费用流
题目描述
输入
输出
如果有可行解, 输出最小代价,否则输出NIE.
样例输入
5
1 1 2 3
1 1 5 1
3 2 5 5
4 1 5 10
3 3 3 1
样例输出
9
题解
费用流
设xi表示学生,yi表示编号,那么S->xi,容量为1,费用为0;xi->能够使得xi接受的yj,容量为1,费用为按照题目中计算出来的相应费用;yi->T,容量为1,费用为0。
然后跑最小费用最大流即可。
- #include <cstdio>
- #include <cstring>
- #include <queue>
- #define N 500
- #define M 100000
- using namespace std;
- queue<int> q;
- int head[N] , to[M] , val[M] , cost[M] , next[M] , cnt = 1 , s , t , dis[N] , from[N] , pre[N];
- int abs(int x)
- {
- return x > 0 ? x : -x;
- }
- void add(int x , int y , int v , int c)
- {
- to[++cnt] = y , val[cnt] = v , cost[cnt] = c , next[cnt] = head[x] , head[x] = cnt;
- to[++cnt] = x , val[cnt] = 0 , cost[cnt] = -c , next[cnt] = head[y] , head[y] = cnt;
- }
- bool spfa()
- {
- int x , i;
- memset(from , -1 , sizeof(from));
- memset(dis , 0x3f , sizeof(dis));
- dis[s] = 0 , q.push(s);
- while(!q.empty())
- {
- x = q.front() , q.pop();
- for(i = head[x] ; i ; i = next[i])
- if(val[i] && dis[to[i]] > dis[x] + cost[i])
- dis[to[i]] = dis[x] + cost[i] , from[to[i]] = x , pre[to[i]] = i , q.push(to[i]);
- }
- return ~from[t];
- }
- int main()
- {
- int n , i , j , m , a , b , k , f = 0 , ans = 0;
- scanf("%d" , &n) , s = 0 , t = 2 * n + 1;
- for(i = 1 ; i <= n ; i ++ )
- {
- scanf("%d%d%d%d" , &m , &a , &b , &k) , add(s , i , 1 , 0) , add(i + n , t , 1 , 0);
- for(j = a ; j <= b ; j ++ ) add(i , j + n , 1 , k * abs(j - m));
- }
- while(spfa())
- {
- k = 0x3f3f3f3f;
- for(i = t ; i != s ; i = from[i]) k = min(k , val[pre[i]]);
- f += k , ans += k * dis[t];
- for(i = t ; i != s ; i = from[i]) val[pre[i]] -= k , val[pre[i] ^ 1] += k;
- }
- if(f < n) printf("NIE\n");
- else printf("%d\n" , ans);
- return 0;
- }
【bzoj1520】[POI2006]Szk-Schools 费用流的更多相关文章
- P3440 [POI2006]SZK-Schools(费用流)
P3440 [POI2006]SZK-Schools 每所学校$i$开一个点,$link(S,i,1,0)$ 每个编号$j$开一个点,$link(i,T,1,0)$ 蓝后学校向编号连边,$link(i ...
- bzoj 1520 [POI2006]Szk-Schools 费用流
[POI2006]Szk-Schools Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 743 Solved: 381[Submit][Status][ ...
- [POI2006] SZK-Schools - 费用流
差不多就是个二分图带权匹配?(我还是敲费用流吧) 每个点向着自己能到的学校连边,费用按题意设定 跑最小费用最大流即可 #include <bits/stdc++.h> using name ...
- hdu-5988 Coding Contest(费用流)
题目链接: Coding Contest Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Ot ...
- POJ2195 Going Home[费用流|二分图最大权匹配]
Going Home Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 22088 Accepted: 11155 Desc ...
- BZOJ3130: [Sdoi2013]费用流[最大流 实数二分]
3130: [Sdoi2013]费用流 Time Limit: 10 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 960 Solved: 5 ...
- 洛谷 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 ...
- Codeforces 730I [费用流]
/* 不要低头,不要放弃,不要气馁,不要慌张 题意: 给两行n个数,要求从第一行选取a个数,第二行选取b个数使得这些数加起来和最大. 限制条件是第一行选取了某个数的条件下,第二行不能选取对应位置的数. ...
- zkw费用流+当前弧优化
zkw费用流+当前弧优化 var o,v:..] of boolean; f,s,d,dis:..] of longint; next,p,c,w:..] of longint; i,j,k,l,y, ...
随机推荐
- [论文理解]MetaAnchor: Learning to Detect Objects with Customized Anchors
MetaAnchor: Learning to Detect Objects with Customized Anchors Intro 本文我其实看了几遍也没看懂,看了meta以为是一个很高大上的东 ...
- 【转】VS2010发布、打包安装程序(超全超详细)
1. 在vs2010 选择“新建项目”→“ 其他项目类型”→“ Visual Studio Installer→“安装项目”: 命名为:Setup1 . 这是在VS2010中将有三个文件夹, 1.“应 ...
- Mybatis-延迟加载和缓存
延迟加载 概念: 就是在需要用到数据时才进行加载,不需要用到数据时就不加载数据.延迟加载也称懒加载. 好处:先从单表查询,需要时再从关联表去关联查询,大大提高数据库性能,因为查询单表要比关联查询多张表 ...
- 多线程:InterlockedIncrement
1.InterlockedIncrement保护多线程中操作的整数. #include <stdio.h> #include <windows.h> volatile long ...
- Oracle11g 主机身份证明问题
oracle 11g的web database control中,进行一些操作需要主机身份证明,比如进行数据备份.数据的导出导入等;这样对于数据库的安全增强了一定的保证.如果我们有进行适当的配置,可以 ...
- PHP implode() 函数
转自:http://www.w3school.com.cn/php/func_string_implode.asp 语法 implode(separator,array) 参数 描述 separato ...
- mysql 报错 Operand should contain 1 column(s)
报错 Operand should contain 1 column(s) 原因 select 后面加了 () select (x,x,x)
- php订单号的生成
来自ECSHOP订单号生成函数:/includes/lib_order.php文件中的get_order_sn() /** * 得到新订单号 * @return string */ function ...
- OpenFaceswap 入门教程(2):软件使用篇!
安装完OpenFaceswap之后,是不是就迫不及待的想要“见证奇迹”了呢? 都说磨刀不误砍柴工.开始之前请先做一个准备.然后大致了解一下换脸的过程 换脸基本步骤是: 把视频切成很多图片 把图片中的人 ...
- python flask学习第1天
flask安装: 第一个flask程序: 用pycharm新建一个flask项目,新建项目的截图如下: app.py代码如下: #从flask这个包中导入Flask这个类 #Flask这个类是项目的核 ...