博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【最小割】【Dinic】HihoCoder - 1252 - The 2015 ACM-ICPC Asia Beijing Regional Contest - D - Kejin Game...
阅读量:6212 次
发布时间:2019-06-21

本文共 2055 字,大约阅读时间需要 6 分钟。

题意:有一个技能学习表,是一个DAG,要想正常学习到技能x,要将指向x的技能全部先学到,然后会有一个正常花费cx。然后你还有一种方案,通过氪金dx直接获得技能x。你还可以通过一定的代价,切断一条边。问你学得指定的技能N的最小代价。

源点向每个点连接代价为cx的边,每个点拆点,内部连接代价为dx的边,然后N向汇点连接代价为无穷的边,然后每条原图中的边的容量为切断其的代价。

容易发现,每一个割集的方案恰好对应一种学习到N的所需代价的方案。所以直接跑最小割即可。

#include
#include
#include
#include
using namespace std;typedef long long ll;#define INF 2147483647000ll#define MAXN 1005#define MAXM 32005ll cap[MAXM];int v[MAXM],en,first[MAXN],nex[MAXM];int d[MAXN],cur[MAXN];queue
q;int S,T;void Init_Dinic(){memset(first,-1,sizeof(first)); en=0;}void AddEdge(const int &U,const int &V,const ll &W){ v[en]=V; cap[en]=W; nex[en]=first[U]; first[U]=en++; v[en]=U; cap[en]=0; nex[en]=first[V]; first[V]=en++;}bool bfs(){ memset(d,-1,sizeof(d)); q.push(S); d[S]=0; while(!q.empty()) { int U=q.front(); q.pop(); for(int i=first[U];i!=-1;i=nex[i]) if(d[v[i]]==-1 && cap[i]) { d[v[i]]=d[U]+1; q.push(v[i]); } } return d[T]!=-1;}ll dfs(int U,ll a){ if(U==T || !a) return a; ll Flow=0,f; for(int &i=cur[U];i!=-1;i=nex[i]) if(d[U]+1==d[v[i]] && (f=dfs(v[i],min(a,cap[i])))) { cap[i]-=f; cap[i^1]+=f; Flow+=f; a-=f; if(!a) break; } if(!Flow) d[U]=-1; return Flow;}ll max_flow(){ ll Flow=0,tmp=0; while(bfs()) { memcpy(cur,first,sizeof(first)); while(tmp=dfs(S,INF)) Flow+=tmp; } return Flow;}int n,m,nn;int main(){// freopen("d.in","r",stdin); int x,y,zu; ll z; scanf("%d",&zu); for(;zu;--zu){ Init_Dinic(); scanf("%d%d%d",&n,&m,&nn); S=n*2+1; T=S+1; for(int i=1;i<=m;++i){ scanf("%d%d%lld",&x,&y,&z); AddEdge(x+n,y,z); } for(int i=1;i<=n;++i){ scanf("%lld",&z); AddEdge(S,i,z); } for(int i=1;i<=n;++i){ scanf("%lld",&z); AddEdge(i,i+n,z); } AddEdge(nn+n,T,INF); printf("%lld\n",max_flow()); } return 0;}

转载于:https://www.cnblogs.com/autsky-jadek/p/7687490.html

你可能感兴趣的文章
利用JNI进行对象操作
查看>>
Real-Rime Rendering (2) - 变换和矩阵(Transforms and Matrics)
查看>>
Hessian和Spring整合
查看>>
easyui 合并问题
查看>>
漏洞信息发布平台和网络安全
查看>>
UIKit框架(10)自定义modal过渡效果
查看>>
setXfermode之使图片圆角化
查看>>
JAVA根据IP地址获取详细的地域信息
查看>>
Tomcat安装部署和安全加固优化以及反向代理应用
查看>>
常用软件整理
查看>>
磁盘超过2T无法用fdisk分区的问题
查看>>
scala特点和java的异同点
查看>>
VirtualBox中三维软件的libgl错误解决
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
#内存管理的艺术# 之 Nginx slab的实现 --- 第四篇“基于块的内存释放”
查看>>
linux下select函数详解及实例
查看>>
关于IE浏览器缓存的处理
查看>>
centos通过screen命令恢复xshell
查看>>
阿里联袂SMG,共同打造中式华尔街日报
查看>>