Ahoi2014&Jsoi2014 支线剧情
题解:
每条边至少经过一次,说明经过下界为$1$。
然后套有源汇上下界最小费用可行流板子。
口胡一下。
此类问题的建图通式为:
1.假设原来的边流量上下界为$[l,r]$,那么在新图中建流量上界为$(r-l)$的边;
就是必须流的先流完,不一定的一会再算。
2.统计一下每个点流入的$l$之和$ind$以及流出的$l$之和$otd$,设$d=ind-otd$;
若$d>0$,则建一条从新源点到该点的、容量为$d$的边,表示减下界的时候多减了,要加回来;
若$d<0$,则建一条从该点到新汇点的、容量为$-d$的边,表示加多了,要减回来。
3.旧汇点->旧源点,容量为$inf$,有借有还再借不难
然后求新图的最小费用最大流,答案即为最小费用+所有边的费用*下界。
代码:
#include<queue>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N = ;
const int inf = 0x3f3f3f3f;
const ll Inf = 0x3f3f3f3f3f3f3f3fll;
template<typename T>
inline void read(T&x)
{
T f = ,c = ;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){c=c*+ch-'';ch=getchar();}
x = f*c;
}
int n,hed[N],cnt=-,S,T,otd[N],ind[N],SS,TT;
struct EG
{
int to,nxt;
ll f,w;
}e[*N];
void ae(int f,int t,ll fl,ll wl)
{
e[++cnt].to = t;
e[cnt].nxt = hed[f];
e[cnt].f = fl;
e[cnt].w = wl;
hed[f] = cnt;
}
void AE(int f,int t,ll fl,ll wl)
{
ae(f,t,fl,wl);
ae(t,f,,-wl);
}
int pre[N],fa[N];
ll dis[N],fl[N],ans;
bool vis[N];
bool spfa()
{
queue<int>q;
memset(dis,0x3f,sizeof(dis));
dis[SS]=,fl[SS]=Inf,vis[SS]=;q.push(SS);
while(!q.empty())
{
int u = q.front();
q.pop();
for(int j=hed[u];~j;j=e[j].nxt)
{
int to = e[j].to;
if(e[j].f&&dis[to]>dis[u]+e[j].w)
{
dis[to]=dis[u]+e[j].w;
fl[to]=min(fl[u],e[j].f);
fa[to]=u,pre[to]=j;
if(!vis[to])
{
vis[to]=;
q.push(to);
}
}
}
vis[u]=;
}
return dis[TT]!=Inf;
}
ll mcmf()
{
ll ret = ;
while(spfa())
{
ret+=fl[TT]*dis[TT];
int u = TT;
while(u!=SS)
{
e[pre[u]].f-=fl[TT];
e[pre[u]^].f+=fl[TT];
u=fa[u];
}
}
return ret;
}
int main()
{
read(n);
S=,T=n+;
SS=n+,TT=n+;
memset(hed,-,sizeof(hed));
for(int k,t,w,i=;i<=n;i++)
{
read(k);
while(k--)
{
read(t),read(w);
ind[t]++,otd[i]++;
AE(i,t,inf,w);
ans+=w;
}
if(i!=)AE(i,T,inf,);
}
for(int i=;i<=n+;i++)
{
int d = ind[i]-otd[i];
if(d<)AE(i,TT,-d,);
else AE(SS,i,d,);
}
AE(T,S,inf,);
ans+=mcmf();
printf("%lld\n",ans);
return ;
}
Ahoi2014&Jsoi2014 支线剧情的更多相关文章
- BZOJ3876[Ahoi2014&Jsoi2014]支线剧情——有上下界的最小费用最大流
题目描述 [故事背景] 宅男JYY非常喜欢玩RPG游戏,比如仙剑,轩辕剑等等.不过JYY喜欢的并不是战斗场景,而是类似电视剧一般的充满恩怨情仇的剧情.这些游戏往往 都有很多的支线剧情,现在JYY想花费 ...
- BZOJ3876 [Ahoi2014&Jsoi2014]支线剧情 【有上下界费用流】
题目 [故事背景] 宅男JYY非常喜欢玩RPG游戏,比如仙剑,轩辕剑等等.不过JYY喜欢的并不是战斗场景,而是类似电视剧一般的充满恩怨情仇的剧情.这些游戏往往 都有很多的支线剧情,现在JYY想花费最少 ...
- [AHOI2014/JSOI2014]支线剧情
题目 有源汇上下界最小费用可行流 首先注意到要求是每一条边都经过至少一次,所以对于每一条边我们设成\([1,\infty]\)就好了 另外所有点都能结束剧情,所有点都要向汇点\(t\)连一条\([0, ...
- bzoj 3876: [Ahoi2014&Jsoi2014]支线剧情【有上下界有源汇最小费用最大流】
每条边流量有下界有费用,很显然是有上下界有源汇最小费用最大流 连边(s,1,(0,inf),0),(i,t,(0,inf),0),表示从1出发inf次从每个点结束inf次 连边(i,j,(1,inf) ...
- bzoj3876: [Ahoi2014&Jsoi2014]支线剧情
题意:给一幅图,从1开始,每条边有边权最少走一遍,可以在任意点退出,问最小花费 题解:上下界费用流,每个边都流一遍,然后为了保证流量平衡,新建源点汇点,跑费用流把流量平衡 /************* ...
- [AHOI2014/JSOI2014]支线剧情 有上下界费用流
---题面--- 题解: 第一眼费用流,,然后想了好久怎么建图,,,最后发现是最小费用可行流的板子题.... 其实还没有很懂这个算法,所以这里只是摆一下步骤,以后再补理解吧. 首先一个思路就是转换图, ...
- bzoj3876: [Ahoi2014&Jsoi2014]支线剧情(上下界费用流)
传送门 一道题让我又要学可行流又要学zkw费用流…… 考虑一下,原题可以转化为一个有向图,每次走一条路径,把每一条边都至少覆盖一次,求最小代价 因为一条边每走过一次,就要付出一次代价 那不就是费用流了 ...
- 【BZOJ3876】[AHOI2014&JSOI2014] 支线剧情(无源汇有上下界网络流)
点此看题面 大致题意: 有一张\(DAG\),经过每条边有一定时间,从\(1\)号点出发,随时可以返回\(1\)号点,求经过所有边的最短时间. 无源汇有上下界网络流 这是无源汇有上下界网络流的板子题. ...
- BZOJ 3876 [Ahoi2014&Jsoi2014]支线剧情
题解: 带下界的费用流 对于x->y边权为z Addedge(x,t,1,0) Addedge(s,y,1,z) Addedge(x,y,inf,0) 然后对每个点Addedge(i,1,inf ...
随机推荐
- git 命令参考手册
你的本地仓库由 git 维护的三棵“树”组成.第一个是你的 工作目录,它持有实际文件:第二个是 缓存区(Index),它像个缓存区域,临时保存你的改动:最后是 HEAD,指向你最近一次提交后的结果. ...
- 我的spring-boot开发环境
我的spring-boot开发环境,目的方便我快速搭建开发环境,同时可以最佳实践.使用spring-boot 2.1.x. 代码地址:GitHub my-springboot-examples 目的是 ...
- Zeppelin的入门使用系列之创建新的Notebook
前期博客 hadoop-2.6.0.tar.gz + spark-1.6.1-bin-hadoop2.6.tgz + zeppelin-0.5.6-incubating-bin-all.tgz(mas ...
- Json----Jackson 下载地址
下载地址: http://repo1.maven.org/maven2/com/fasterxml/jackson/
- Jmeter之文件下载
Jmeter文件下载 1.打开jmeter新建线程组—>http请求 2.在百度上选择一个图片下载,选择图片右击复制图片地址 https://ss1.baidu.com/9vo3dSag_xI4 ...
- 洛谷 P2147 [SDOI2008]洞穴勘测
以下这个做法应该是叫线段树分治... 根据修改操作预处理出每条边存在的时间区间[l,r](以操作序号为时间),然后把所有形式化后的修改挂到线段树节点上. 处理完修改后,dfs一遍线段树,进入某个节点时 ...
- springMVC的架构与执行流程
SpringMVC术语 前端控制器(DispatcherServlet):接收请求,响应结果,相当于电脑的CPU. 处理器映射器(HandlerMapping):根据URL去查找处理器 处理器(Han ...
- python_面向对象进阶(7)
第1章 面向对象特性—继承(补充) 1.1 接口类.抽象类介绍 1.2 接口类 1.3 接口类应用过程 1.3.1 第一版:完成多种支付方式接口 1.3.2 第二版: 归一化设计,统一支付方式 1.3 ...
- C#基础学习3
运算符,表达式!
- 非常强大的前端插件:emmet
安装 Emmet 也有快速生成文件头的功能啊,而且更强大啊输入下边加粗的缩写,然后Tab,就OK了啊http://docs.emmet.io/cheat-sheet/ html:4t <!DOC ...