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 ...
随机推荐
- Java简单高精度合集
第一个Java的算法程序.记得可以使用Alt+'/'自动补全sysout和main之类的. BigInteger在java.math.BigInteger中. import java.math.Big ...
- Codeforces627A【数学·有意思】
题意: 求有多少对( a , b ),a+b=s,a^b=x.(正整数) 思路: a+b=a^b+a&b*2; #include <iostream> #include <c ...
- maven构建web项目,cannot be cast to javax.servlet.Servlet
今天开发web的时候,需要用到servlet-api,于是在pom.xml中添加依赖 <dependency> <groupId>javax.servlet</group ...
- Spring AOP SpringBoot集成
上一篇文章<Spring AOP 面向切面编程入门>对AOP作了简要的介绍,包含一些专业术语的解释. 本文基于SpringBoot编写了一个简单的Spring AOPDemo. maven ...
- 突然所有命令都不能用了, /usr/bin不在path里 .bashrc文件
export PATH=/usr/bin:/bin .bashrc文件中多一个空格都不行啊所有的问题都是因为复制的时候多了空格,简直无语,用了两个小时
- 优先队列 POJ 3253 Fence Repair
题目传送门 题意:一块木板按照某个顺序切成a[1], a[2]...a[n]的长度,每次切都会加上该两段木板的长度,问选择什么顺序切能使得累加和最小 分析:网上说这是哈夫曼树.很容易想到先切掉最长的, ...
- Android-apk文件反编译
一:工具介绍及下载 1:apktool 作用:资源文件获取,可以提取出图片文件和布局文件进行使用查看 2:dex2jar 作用:将apk反编译成java源码(classes ...
- Linux下mysql新建账号及权限设置各种方式总结
来自:http://justcoding.iteye.com/blog/1941116 1.权限赋予 说明:mysql部署在服务器A上,内网上主机B通过客户端工具连接服务器A以进行数据库操作,需要服务 ...
- DNS练习之正向解析
配置正向解析: 主机名:sishen63 主机IP:192.168.1.63 操作系统:Red Hat Enterprise Linux Server release 6.5 (Santiago) 安 ...
- oozie.log报提示:org.apache.oozie.service.ServiceException: E0104错误 An Admin needs to install the sharelib with oozie-setup.sh and issue the 'oozie admin' CLI command to update sharelib
不多说,直接上干货! 问题详情 关于怎么启动oozie,我这里不多赘述. Oozie的详细启动步骤(CDH版本的3节点集群) 然后,我在查看 [hadoop@bigdatamaster logs]$ ...