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 ...
随机推荐
- Codeforces - 909C - Python Indentation - 简单dp
http://codeforces.com/problemset/problem/909/C 好像以前做过,但是当时没做出来,看了题解也不太懂. 一开始以为只有上面的for有了循环体,这里的state ...
- 704. Binary Search
Given a sorted (in ascending order) integer array nums of n elements and a target value, write a fun ...
- c# dynamic 无法创建 泛型变量的问题
IMyClass<T> FunctionA<T>( object arg_obj) { dynamic dyObj = arg_obj; return new MyClass& ...
- VS代码中常用 正则表达式
1. #define ABC 1 修改为 enum 样式: #define (.+?)\s+(.+?)$ $1 = $2 ,
- dd 使用记录
使用dd的工具 1)测试写速度 2)测试读速度 3)测试读写速度 dd说明: if是输入文本,of是输出文本,bs是块大小,count是你指定读写块的数量 /dev/zero是从内存里面读取,不会产生 ...
- LuoguP2320/CF1037A 用二进制表示数的奥妙重重方法 By cellur925
题目描述 鬼谷子非常聪明,正因为这样,他非常繁忙,经常有各诸侯车的特派员前来向他咨询时政. 有一天,他在咸阳游历的时候,朋友告诉他在咸阳最大的拍卖行(聚宝商行)将要举行一场拍卖会,其中有一件宝物引起了 ...
- Ubuntu18 安装jdk8
按照网上能找到的方法,添加仓库已经不行了,具体原因如下: I look up to the webupd8 site and it seems that the ppa was discontinue ...
- [MySQL] LIMIT 分页优化
背景:LIMIT 0,20 这种分页方式,随着 offset 值的不断增大,当达到百万级时,一条查询就需要1秒以上,这时可以借助索引条件的查询来优化. SQL:select * from member ...
- tsconfig.json No inputs were found in config file
Build:No inputs were found in config file '/tsconfig.json'. Specified 'include' paths were '["* ...
- forward和sendRedirect的区别
部分内容转自:http://blog.csdn.net/zhouysh/article/details/380364和http://blog.csdn.net/frank_jay/article/de ...