设$degi[x]$和$dego[x]$分别表示每个点的入度和出度,将线性规划的限制写出来:

目标函数:

$\max.\ \sum_{x=1}^n(dego[x]P[x]-degi[x]Q[x])$

限制:

$P[x]-Q[y]\leq T(x,y)-L(x,y)$

$Q[y]-P[x]\leq L(x,y)-S(x,y)$

$P[x]\leq 10^6$

$Q[x]\leq 10^6$

这是个标准型线性规划,将其对偶,得到每条边的两个辅助变量$a,b$以及每个$P,Q$对应上界的辅助变量$c,d$:

目标函数:

$\min.\ \sum_{(x,y)\in E}((T(x,y)-L(x,y))a(x,y)+(L(x,y)-S(x,y))b(x,y))+\sum_{x=1}^n(10^6c[x]+10^6d[x])$

限制:

$\sum_{(x,i)\in E}a(x,i)-\sum_{(i,x)\in E}b(i,x)+c[x]\geq dego[x]$

$\sum_{(i,x)\in E}b(i,x)-\sum_{(x,i)\in E}a(x,i)+d[x]\geq -degi[x]$

将每条限制看作点,每个二元变量看作边,在对应负系数限制连向正系数限制,流量$[0,+\infty)$,费用为在目标函数中的系数。

对于$c$和$d$,从$S$向$x$连边,流量$[0,+\infty)$,费用$10^6$。

对于$dego[x]$,从$x$向$T$连边,流量$[dego[x],+\infty)$,费用$0$。

对于$-degi[x]$,从$S$向$x$连边,流量$[degi[x],degi[x]]$,再从$x$向$T$连边,流量$[0,+\infty)$,费用$0$。

则答案就是这个图的最小费用可行流,当出现负环时该线性规划无界,故原问题无解。

#include<cstdio>
typedef long long ll;
const int N=60010,M=1000000;
const ll inf=1LL<<60;
int Case,n,m,i,degi[N],dego[N];ll tmp,ans;
int u[M],v[M],nxt[M],t,S,T,SS,TT,q[M],g[N],f[N],cnt[N];ll c[M],co[M],d[N],in[N];bool vis[N];
unsigned short l,r;
inline void add(int x,int y,ll l,ll r,ll z){
r-=l,in[x]-=l,in[y]+=l;
if(!r)return;
u[++t]=x;v[t]=y;c[t]=r;co[t]=z;nxt[t]=g[x];g[x]=t;
u[++t]=y;v[t]=x;c[t]=0;co[t]=-z;nxt[t]=g[y];g[y]=t;
}
int spfa(){
int x,i;
for(i=1;i<=TT;i++)d[i]=inf,vis[i]=cnt[i]=0;
d[SS]=0;vis[SS]=1;q[l=r=0]=SS;
while(l!=r+1){
x=q[l++];
if(x==TT)continue;
vis[x]=0;
for(i=g[x];i;i=nxt[i])if(c[i]&&co[i]+d[x]<d[v[i]]){
d[v[i]]=co[i]+d[x];f[v[i]]=i;
if(!vis[v[i]]){
vis[v[i]]=1;
cnt[v[i]]++;
if(cnt[v[i]]>TT+5)return -1;
q[++r]=v[i];
}
}
}
return d[TT]<inf;
}
bool solve(){
scanf("%d%d",&n,&m);
S=n*2+1;
T=S+1;
SS=T+1;
TT=SS+1;
for(t=i=1;i<=TT;i++)degi[i]=dego[i]=g[i]=in[i]=0;
ans=0;
add(T,S,0,inf,0);
bool flag=0;
while(m--){
int x,y,_L,_S,_T;
scanf("%d%d%d%d%d",&x,&y,&_L,&_S,&_T);
if(_S>_T)flag=1;
dego[x]++;
degi[y]++;
ans+=_L;
add(y+n,x,0,inf,_T-_L);
add(x,y+n,0,inf,_L-_S);
}
if(flag)return 0;
for(i=1;i<=n;i++){
add(S,i,0,inf,1000000);
add(i,T,dego[i],inf,0);
add(S,i+n,0,inf,1000000);
add(S,i+n,degi[i],degi[i],0);
add(i+n,T,0,inf,0);
}
for(i=1;i<=TT;i++){
if(in[i]>0)add(SS,i,0,in[i],0);
if(in[i]<0)add(i,TT,0,-in[i],0);
}
while(1){
int o=spfa();
if(!o)return 1;
if(o==-1)return 0;
for(tmp=inf,i=TT;i!=SS;i=u[f[i]])if(tmp>c[f[i]])tmp=c[f[i]];
for(ans+=d[i=TT]*tmp;i!=SS;i=u[f[i]])c[f[i]]-=tmp,c[f[i]^1]+=tmp;
}
}
int main(){
scanf("%d",&Case);
while(Case--)if(!solve())puts("Unlike");else printf("%lld\n",ans);
return 0;
}

  

BZOJ4218 : 不知道高到哪里去了的更多相关文章

  1. UWP学习目录整理

    UWP学习目录整理 0x00 可以忽略的废话 10月6号靠着半听半猜和文字直播的补充看完了微软的秋季新品发布会,信仰充值成功,对UWP的开发十分感兴趣,打算后面找时间学习一下.谁想到学习的欲望越来越强 ...

  2. Asp.Net Core + Dapper + Repository 模式 + TDD 学习笔记

    0x00 前言 之前一直使用的是 EF ,做了一个简单的小项目后发现 EF 的表现并不是很好,就比如联表查询,因为现在的 EF Core 也没有啥好用的分析工具,所以也不知道该怎么写 Linq 生成出 ...

  3. Github使(zhuang)用(bi)指南

    本文针对未能熟练使用GitHub的人员,旨在为其指明通往新世界的小路. 一些闲话可以无视 在这个开源的时代,可能你听说过GitHub,知道大概是个什么.但是,你要是不能熟练的玩起来,怎么和大神取经,怎 ...

  4. HackerRank Week of Code 26

    好像这次week of code不是很难= = A int main(){ int n; int m; cin >> n >> m; cout<<(n+)/*)/) ...

  5. Coursera上一个不错的Java课

    地址:https://www.coursera.org/learn/java-chengxu-sheji/home/welcome 复习天昏地暗,看点视频调剂一下.发现这个讲的还是很不错的.北大毕竟比 ...

  6. ATL封装IE内核启示:使用Win32/ATL建立窗口

    开发大型GUI界面程序MFC当仁不让,但如果是开发图形应用程序,并不需要大规模界面控件,没有必要链接庞大的MFC库,直接使用platform sdk会很麻烦,这时ATL中的关于Windows的封装就是 ...

  7. UWP开发入门(二十二)——Storyboard和Animation

    微博上有同学问我MyerSplash是如何实现那个很炫的图片点亮,然后移动到屏幕中央的效果.惭愧啊,我又不是作者哪里会知道.硬着头皮去GitHub拜读了高手的代码,自愧弗如,比我不知道高到哪里去了…… ...

  8. Acadia Lab 6 轮盘游戏机

    WRTnode 肯定不是亲生的... 果断转投Acadia —.— 不是国军不给力,奈何共军有高达 为啥不转树莓派?因为选做实验肯定有很多人用树莓派做...我抢不过他们,只能挑点冷门的蹭分_(:з」 ...

  9. 说说这篇「我为什么从python转向go

    作者 CMGS2015.05.17 15:47* 写了7891字,被143人关注,获得了97个喜欢 说说这篇「我为什么从python转向go」 字数3748 阅读24227 评论21 喜欢81 恩看了 ...

随机推荐

  1. Linux系统下目录的权限意义

    访问者及其基本权限 Linux系统内的文件访问者有三种身份,分别是: a) 文件和文件目录的所有者: u---User(所有权);b) 文件和文件目录的所有者所在的组的用户: g---Group;c) ...

  2. Tensorflow 损失函数及学习率的四种改变形式

    Reference: https://blog.csdn.net/marsjhao/article/details/72630147 分类问题损失函数-交叉熵(crossentropy) 交叉熵描述的 ...

  3. 51Nod 1265 四点共面(计算几何)

    1265 四点共面  基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 给出三维空间上的四个点(点与点的位置均不相同),判断这4个点是否在同一个平面内(4点共线也算共面). ...

  4. 史上最简单的SpringCloud教程 | 第二篇: 服务消费者(rest+ribbon)

    在上一篇文章,讲了服务的注册和发现.在微服务架构中,业务都会被拆分成一个独立的服务,服务与服务的通讯是基于http restful的.Spring cloud有两种服务调用方式,一种是ribbon+r ...

  5. 通过expdp和impdp将Oracle11g数据导入到Oracle10g中

    1 导出过程 1.1 查看目录: select * from dba_directories; 1.2 将目录的操作权限赋值给指定的用户(不执行次步骤可能会出现权限问题): grant read,wr ...

  6. IIS7 禁止目录运行脚本

    早晨看博客说有人被黑了:http://www.cnblogs.com/sanshi/p/3150639.html 看回复建议禁用上传目录的脚本运行权限 在IIS6上还是比较容易的,直接右键--属性,把 ...

  7. [转] iOS9系统自带字体

    Family: Thonburi Font: Thonburi-Bold Font: Thonburi Font: Thonburi-Light 1 2 3 4 Family: Khmer Sanga ...

  8. 【译】异步JavaScript的演变史:从回调到Promises再到Async/Await

    我最喜欢的网站之一是BerkshireHathaway.com--它简单,有效,并且自1997年推出以来一直正常运行.更值得注意的是,在过去的20年中,这个网站很有可能从未出现过错误.为什么?因为它都 ...

  9. linux 运维一些常见的简单安全设置 运维必看

    1. 修改ssh服务的默认端口,这个是十分有必要的,因为密码爆破一直存在.ssh服务的默认端口是22,一般的恶意用户也往往扫描或尝试连接22端口.所以第一步就是修改这个默认端口打开/etc/ssh/s ...

  10. spring security实现动态配置url权限的两种方法

    缘起 标准的RABC, 权限需要支持动态配置,spring security默认是在代码里约定好权限,真实的业务场景通常需要可以支持动态配置角色访问权限,即在运行时去配置url对应的访问角色. 基于s ...