博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[洛谷1231]教辅的组成
阅读量:6953 次
发布时间:2019-06-27

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

思路:

最大流跑三分图匹配,注意每本书只能用一次,所以把每本书拆成两个点,连一条边。

不能直接用EdmondsKarp算法,也不能直接用不加优化的Dinic算法,这样会TLE7个点。
本题正解是Dinic算法加上当前弧优化。

1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 inline int getint() { 8 char ch; 9 while(!isdigit(ch=getchar()));10 int x=ch^'0';11 while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0');12 return x;13 }14 const int inf=0x7fffffff;15 int s,t;16 struct Edge {17 int from,to;18 bool remain;19 };20 const int E=1400000,V=400002;21 Edge e[E];22 std::vector
g[V];23 int sz=0;24 inline void add_edge(const int u,const int v,const bool w) {25 e[sz]=(Edge){u,v,w};26 g[u].push_back(sz);27 sz++;28 }29 int d[V];30 inline void SPFA() {31 d[s]=0;32 for(register int i=1;i<=t;i++) d[i]=inf;33 std::queue
q;34 q.push(s);35 while(!q.empty()) {36 int x=q.front();37 q.pop();38 if(x==t) return;39 for(register unsigned i=0;i
d[x])&&y.remain) {54 if(Augment(y.to,std::min(remain,y.remain))) {55 e[g[x][i]].remain^=true;56 e[g[x][i]^1].remain^=true;57 return true;58 }59 }60 }61 return false;62 }63 inline int Dinic() {64 int maxflow=0;65 for(SPFA();d[t]!=inf;SPFA()) {66 memset(cur,0,sizeof cur);67 while(Augment(s,true)) maxflow++;68 }69 return maxflow;70 }71 int main() {72 int n2=getint(),n1=getint(),n3=getint();73 s=0,t=n1+n2*2+n3+1;74 for(register int i=1;i<=n1;i++) {75 add_edge(s,i,true);76 add_edge(i,s,false);77 }78 for(register int m=getint();m;m--) {79 int a=getint(),b=getint();80 add_edge(b,n1+a,true);81 add_edge(n1+a,b,false);82 }83 for(register int i=1;i<=n2;i++) {84 add_edge(n1+i,n1+n2+i,true);85 add_edge(n1+n2+i,n1+i,false);86 }87 for(register int m=getint();m;m--) {88 int a=getint(),b=getint();89 add_edge(n1+n2+a,n1+n2*2+b,true);90 add_edge(n1+n2*2+b,n1+n2+a,false);91 }92 for(register int i=1;i<=n3;i++) {93 add_edge(n1+n2*2+i,t,true);94 add_edge(t,n1+n2*2+i,false);95 }96 printf("%d\n",Dinic());97 return 0;98 }

 

转载于:https://www.cnblogs.com/skylee03/p/7257086.html

你可能感兴趣的文章
JS函数式编程读书笔记 - 2
查看>>
Yii2系列教程:安装及Hello World
查看>>
带权轮询算法
查看>>
细谈证书与Provisioning Profile
查看>>
bboss平台子系统配置及系统登录以及其它常用配置介绍
查看>>
.Net中stirng转System.Type的一种实现思路
查看>>
免费的NLP学习资源,了解一下
查看>>
Raspbian 2019-04-08 发布,树莓派上的 Debian
查看>>
C#中如何给Excel添加水印
查看>>
mongodb嵌套文档结构设计
查看>>
[Sqoop]Sqoop使用
查看>>
Maven学习笔记(一)
查看>>
《零基础 Java 开发 》 第三章 运算符
查看>>
Maven_学习_01_跳过单元测试
查看>>
推荐 :2018最流行的编程语言Top 3
查看>>
BeanFactory 和 ApplicationContext
查看>>
Java如何制作帮助文档(API)
查看>>
Parrot 4.6 发布,基于 Debian 的 Linux 发行版
查看>>
HTML 基础
查看>>
NSA 将向公众开源逆向工程工具 GHIDRA
查看>>