【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, ... 
随机推荐
- 【洛谷4884】多少个1?(BSGS)
			点此看题面 大致题意: 求满足\(个111...111(N\text{个}1)\equiv K(mod\ m)\)的最小\(N\). 题目来源 这题是洛谷某次极不良心的月赛的\(T1\),当时不会\( ... 
- NBU基本常用命令
			Veritas常用命令: 1. 查看当有运行的任务 bpdbjobs –report | grep Active 2. 停止任务 bpdbjobs –cancel PID (包括主任务和子任务) 3. ... 
- python 多进程简单调用
			python 多进程简 #!/usr/bin/env python #-*- coding:utf-8 -*- # author:leo # datetime:2019/5/28 10:03 # so ... 
- JS中进行浮点数计算式,遇到的问题
			今天在做项目时,需要在页面进行计算,但是当两个数都是小数时,计算的结果却不是想象中的: 比如1371.3-0.9算出来却是1370.39999999,后来上网搜一下,原来js是弱类型语言,没有那么高的 ... 
- Bootstrap 轮播(Carousel)插件
			轮播插件是一种灵活的响应式的向站点添加滑块的方式.除此之外,内容也是非常灵活的.可是图像,内嵌框架,视频或者其它您想的放置任何内容的类型. 下面是一个简单的幻灯片,使用轮播(carousel)插件显示 ... 
- oracle常用运维sql语句
			1.查询dblink语句 col owner for a20col db_link for a30col username for a20col host for a30set linesize 12 ... 
- WebService简单入门
			写在前面的话: 当两个人碰面后,产生了好感,如果需要得到双方的信息,那么双方的交流是必不可少的!应用程序也如此, 各个应用程序之间的交流就需要WebService来作为相互交流的桥梁! 项目目的: 程 ... 
- webpack+thymeleaf实现数据直出
			webpack动态插入thymeleaf模板,MVC将要使用数据传递到模板中渲染,得到的html就已经带有要初始显示的数据了github:https://github.com/947133297/we ... 
- vue 中有时候是数据没有同步的问题
			1,在项目中,在做表格的数据渲染的时候,表格中有input标签的数据来进行双向绑定, this.$set(this.tableTitle.money, index, money[index]+isMo ... 
- Codeforces Round #464 (Div. 2) A Determined Cleanup
			A. Love Triangle time limit per test1 second memory limit per test256 megabytes Problem Description ... 
