P3440 [POI2006]SZK-Schools
应该是很显然的费用流模型吧...
$S$ 向所有学校连边,流量为 $1$,费用为 $0$(表示每个学校要选一个编号)
学校向范围内的数字连边,流量为 $1$,费用为 $c|m-m'|$(表示学校选择编号的花费)
注意学校向原来的数字连边,流量 $1$,费用 $0$(表示学校可以不改变编号)
所有数字向 $T$ 连边,流量为 $1$(每个数字只能给一个学校)
那么一个流就代表一个学校的选择
然后最小费用最大流就是答案
记得判一下无解就好了
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
using namespace std;
typedef long long ll;
inline int read()
{
int x=,f=; char ch=getchar();
while(ch<''||ch>'') { if(ch=='-') f=-; ch=getchar(); }
while(ch>=''&&ch<='') { x=(x<<)+(x<<)+(ch^); ch=getchar(); }
return x*f;
}
const int N=2e5+,M=2e6+,INF=1e9+;
int fir[N],from[M<<],to[M<<],val[M<<],cst[M<<],cntt=;
inline void add(int a,int b,int c,int d)
{
from[++cntt]=fir[a]; fir[a]=cntt;
to[cntt]=b; val[cntt]=c; cst[cntt]=d;
from[++cntt]=fir[b]; fir[b]=cntt;
to[cntt]=a; val[cntt]=; cst[cntt]=-d;
}
int dis[N],mif[N],pre[N],S,T;
queue <int> q;
bool inq[N];
bool BFS()
{
for(int i=S;i<=T;i++) dis[i]=INF;
q.push(S); inq[S]=; dis[S]=; mif[S]=INF;
while(!q.empty())
{
int x=q.front(); q.pop(); inq[x]=;
for(int i=fir[x];i;i=from[i])
{
int &v=to[i]; if( !val[i] || dis[v]<=dis[x]+cst[i] ) continue;
dis[v]=dis[x]+cst[i]; pre[v]=i;
mif[v]=min(mif[x],val[i]);
if(!inq[v]) q.push(v),inq[v]=;
}
}
return dis[T]<INF;
}
int ans;
inline void upd()
{
for(int now=T,i=pre[T]; now!=S; now=to[i^],i=pre[now])
val[i]-=mif[T],val[i^]+=mif[T];
ans+=mif[T]*dis[T];
} int n;
int main()
{
int m,a,b,k;
n=read(); S=,T=n+n+;
for(int i=;i<=n;i++)
{
add(S,i,,);
m=read(),a=read(),b=read(),k=read();
add(i,n+m,,);
for(int j=a;j<=b;j++)
add(i,n+j,,abs(m-j)*k);
}
for(int i=;i<=n;i++) add(n+i,T,,);
while(BFS()) upd();
for(int i=fir[S];i;i=from[i])
if(val[i]) { printf("NIE"); return ; }
printf("%d",ans);
return ;
}
P3440 [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 ...
- POJ1236Network of Schools[强连通分量|缩点]
Network of Schools Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 16571 Accepted: 65 ...
- POJ 1236 Network of Schools(Tarjan缩点)
Network of Schools Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 16806 Accepted: 66 ...
- Network of Schools --POJ1236 Tarjan
Network of Schools Time Limit: 1000MS Memory Limit: 10000K Description A number of schools are conne ...
- BZOJ 1121: [POI2008]激光发射器SZK
1121: [POI2008]激光发射器SZK Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 792 Solved: 653[Submit][Sta ...
- 【BZOJ-1121】激光发射器SZK 物理 + 数学 + 乱搞
1121: [POI2008]激光发射器SZK Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 682 Solved: 565[Submit][Sta ...
- POJ 1236 Network of Schools(强连通分量/Tarjan缩点)
传送门 Description A number of schools are connected to a computer network. Agreements have been develo ...
- POJ1236Network of Schools(强连通分量 + 缩点)
题目链接Network of Schools 参考斌神博客 强连通分量缩点求入度为0的个数和出度为0的分量个数 题目大意:N(2<N<100)各学校之间有单向的网络,每个学校得到一套软件后 ...
- [强连通分量] POJ 1236 Network of Schools
Network of Schools Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 16803 Accepted: 66 ...
随机推荐
- [SoapUI]获取Project,Test Suite,Test Case各个级别参数的值
String testResultPath = testRunner.testCase.testSuite.project.getPropertyValue( "testResultPath ...
- 图灵社区 书单推荐:成为Java顶尖程序员 ,看这11本书就够了
java书单推荐 转自 http://www.ituring.com.cn/article/211418 “学习的最好途径就是看书“,这是我自己学习并且小有了一定的积累之后的第一体会.个人认为看书有两 ...
- ResourceUtils读取properties文件
注意: properties文件要放在classPath下面,也就是与src下. path.properties(在properties文件中\代表着没有完,下行同本行是一个内容) perfectMa ...
- KbmMW 4.40.00 正式版发布
经过快3个月的测试,kbmmw 4.40 正式版终于在圣诞节前发布了. We are happy to announce the availability of a new kbmMW release ...
- 1 web应用-http协议-web框架
web 应用 Web 应用程序是一种可以通过 Web 访问的应用程序,程序的最大好处是用户很容易访问应用程序,用户只需要有浏览器即可,不需要再安装其他软件.应用程序有两种模式 C/S.B/S.C/S ...
- CMake使用技巧集
1.注意CMake不允许出现相同的目标名称,即使是不同的目录下的CMakeLists.txt 2.将头文件搜索路径插入到其它的前面: include_directories(BEFORE /tmp) ...
- C#基础入门 九
C#基础入门 九 集合 对于很多应用程序,需要创建和管理相关对象组,有两种方式可以将对象分组,一是创建对象数组,如 object[] obj=new object[3]{1,2.33,"st ...
- 国内顶尖的sql dba 团队招人。
国内顶尖的sql dba 团队招人. 4年DBA 经验 我们希望你掌握 1.熟练关系型数据库原理.熟练一门语言(C# .Java.Python.powershell ) 2.对自动化.数据化感兴趣. ...
- Java Been, EJB, POJO 之间的区别
Java Bean 是可复用的组件,对Java Bean并没有严格的规范,理论上讲,任何一个Java类都可以是一个Bean.但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以 ...
- IIS隐藏网站
IIS隐藏网站 1.站点建立一个文件夹:Test 2.在F盘新建Web文件夹(放要隐藏的网站) 3.右键Test文件夹-新建虚拟目录,虚拟目录指向步骤2 4.删除Test文件夹即可