在大米饼的帮助下,终于找到了大米饼程序中如同大米饼一般的错误!

考点在问题转化,然后就跑一个你喜欢的最大流算法(二分图可以啵?)

再来一个例子吧:

【纯手绘大米饼图片】

其中有的边权是1,否则就是inf,所以就将问题转化为求超级源点(0)到超级汇点(13)的最大流。我依旧使用ISAP,很开心用ISAP做完了所有老师要求用迪尼克或者艾德蒙·卡普算法做的几个题目,开心点在哪里呢…在乎大米饼之中也。最后一个困扰了me20min的错误是:

把device[i][1]错写成device[i][2],使得CMP函数失效。

 1 #include<stdio.h>
2 #include<algorithm>
3 #include<queue>
4 #include<cstring>
5 #define go(i,a,b) for(int i=a;i<=b;i++)
6 #define fo(i,a,x) for(int i=a[x];i>-1;i=e[i].next)
7 #define mem(a,b) memset(a,b,sizeof(a))
8 #define inf 1000000000
9 using namespace std;const int N=90000
;
10 struct E{int v,next,flow,cap;}e[N*20
];
11 char socket[N][30],device[N][2][30],change[N][2][30
];
12 int
n,m,s,t,head[N],k,K,d[N],preE[N],preN[N],cur[N],num[N];
13 void ADD(int u,int v,int flow,int cap){e[K]=(E){v,head[u],flow,cap};head[u]=K++
;}
14 void
Big_Riced_Pancake()
15 {//m(device)--->k(change)--->n(socket)
16 go(i,1,m){ADD(s,i,0,1);ADD(i,s,0,0
);
17 go(j,1,k)if(!strcmp(device[i][1],change[j][0]))ADD(i,j+m,0,inf),ADD(j+m,i,0,0
);
18 go(j,1,n)if(!strcmp(device[i][1],socket[j]))ADD(i,m+k+j,0,1),ADD(m+k+j,i,0,0
);}
19 go(i,1,n)ADD(m+k+i,t,0,1),ADD(t,m+k+i,0,0);go(i,1
,k){
20 go(j,1,k)if((i!=j)&&(!strcmp(change[i][1],change[j][0])))ADD(i+m,j+m,0,inf),ADD(j+m,i+m,0,0
);
21 go(j,1,n)if(!strcmp(change[i][1],socket[j]))ADD(i+m,m+k+j,0,inf),ADD(m+k+j,i+m,0,0
);}
22
}
23 void BFS(){queue<int>q;bool vis[N]={0};q.push(t);vis[t]=1;d[t]=0
;
24 while(!q.empty()){int u=
q.front();q.pop();fo(i,head,u)
25 {int v=e[i].v;if(!vis[v]&&!e[i].cap)vis[v]=1,d[v]=d[u]+1
,q.push(v);}}
26
}
27 int aug(){int u,a=
inf;
28 u=t;while(u!=s){int i=preE[u];a=min(a,e[i].cap-e[i].flow);u=
preN[u];}
29 u=t;while(u!=s){int i=preE[u];e[i].flow+=a;e[i^1].flow-=a;u=preN[u];}return
a;
30
}
31 int main(){scanf("%d",&n);go(i,1,n)scanf("%s"
,socket[i]);
32 scanf("%d",&m);go(i,1,m)go(j,0,1)scanf("%s"
,device[i][j]);
33 scanf("%d",&k);go(i,1,k)go(j,0,1)scanf("%s"
,change[i][j]);
34 mem(head,-1);K=0;s=0;t=n+m+k+1
;Big_Riced_Pancake();
35 BFS();go(i,0,t)num[d[i]]++,cur[i]=head[i];int u=s,flow=0
;
36 while(d[s]<t+1){u==t?flow+=aug(),u=s:1;bool retreat=1
;
37 fo(i,cur,u){int v=e[i].v;if(e[i].cap>e[i].flow&&d[u]==d[v]+1
)
38 {retreat=0;preN[v]=u;cur[u]=preE[v]=i;u=v;break;}}if(!retreat)continue
;
39 int Min=
t;
40 fo(i,head,u){int v=e[i].v;if(e[i].cap>e[i].flow)Min=
min(Min,d[v]);}
41 if(!(--num[d[u]]))break;num[d[u]=Min+1]++;cur[u]=head[u];if(u!=s)u=
preN[u];
42 }printf("%d\n",m-flow);return 0
;
43 }//Paul_Guderian

【ISAP-37msAC大米饼】

感谢帮我给手稿拍照的同学!

【poj 1087 a plug for UNIX】的更多相关文章

  1. POJ 1087 A Plug for UNIX / HDU 1526 A Plug for UNIX / ZOJ 1157 A Plug for UNIX / UVA 753 A Plug for UNIX / UVAlive 5418 A Plug for UNIX / SCU 1671 A Plug for UNIX (网络流)

    POJ 1087 A Plug for UNIX / HDU 1526 A Plug for UNIX / ZOJ 1157 A Plug for UNIX / UVA 753 A Plug for ...

  2. poj 1087 A Plug for UNIX(字符串编号建图)

    A Plug for UNIX Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 14862   Accepted: 5026 ...

  3. poj 1087 A Plug for UNIX 【最大流】

    题目连接:http://poj.org/problem? id=1087 题意: n种插座 ,m个电器,f组(x,y)表示插座x能够替换插座y,问你最多能给几个电器充电. 解法:起点向插座建边,容量1 ...

  4. POJ 1087 A Plug for UNIX (网络流,最大流)

    题面 You are in charge of setting up the press room for the inaugural meeting of the United Nations In ...

  5. 【uva753/poj1087/hdu1526-A Plug for UNIX】最大流

    题意:给定n个插座,m个插头,k个转换器(x,y),转换器可以让插头x转成插头y.问最少有多少个插头被剩下. 题解: 最大流或者二分图匹配.然而我不知道怎么打二分图匹配..打了最大流.这题字符串比较坑 ...

  6. kuangbin专题专题十一 网络流 POJ 1087 A Plug for UNIX

    题目链接:https://vjudge.net/problem/POJ-1087 题目:有n个插座,插座上只有一个插孔,有m个用电器,每个用电器都有插头,它们的插头可以一样, 有k个插孔转化器, a ...

  7. poj 1087 A Plug for UNIX

    题目描述:现在由你负责布置Internet联合组织首席执行官就职新闻发布会的会议室.由于会议室修建时被设计成容纳全世界各地的新闻记者,因此会议室提供了多种电源插座用以满足(会议室修建时期)各国不同插头 ...

  8. poj 1087.A Plug for UNIX (最大流)

    网络流,关键在建图 建图思路在代码里 /* 最大流SAP 邻接表 思路:基本源于FF方法,给每个顶点设定层次标号,和允许弧. 优化: 1.当前弧优化(重要). 1.每找到以条增广路回退到断点(常数优化 ...

  9. hdu 1087 A Plug for UNIX 最大流

    题意:http://www.phpfans.net/article/htmls/201012/MzI1MDQw.html 1.在一个会议室里有n种插座,每种插座一个: 2.每个插座只能插一种以及一个电 ...

随机推荐

  1. a标签传递参数

    a标签传递参数 单个参数:参数名称前面跟   ? <a href="localhost:8080/arguments?id=1">单个参数</a> 多个参数 ...

  2. 开发者的如何优雅的使用OSX

    Mac对于IT开发者来说是最好的开发工具,没有之一. 但是对于大部分人来说,第一个接触的PC操作系统都是Windows系统,此文将带大家优雅的快速学习和使用Mac的OSX系统. 1. 从键盘说起 Ma ...

  3. JAVA_SE基础——8.基本数据类型

    基本数据类型有:整数类型.浮点类型.字符类型.布尔类型 整数类型 整数类型用来存储整数数值,即没有小数部分的数值.与C.C++语言相同,整数在Java语言中有3种表示形式:十进制.八进制和十六进制. ...

  4. Mysql必须知道的知识

    最近在准备面试,所以也整理了一些Mysql数据库常用的知识,供大家参考. 1.MySQL的复制原理以及流程 (1).复制基本原理流程 1. 主:binlog线程--记录下所有改变了数据库数据的语句,放 ...

  5. XML之XPath

    1.在 XPath 中,有七种类型的节点:元素.属性.文本.命名空间.处理指令.注释以及文档节点(或称为根节点). 1.1 XPath 术语 节点(Node) 在 XPath 中,有七种类型的节点:元 ...

  6. ubuntu下创建python的虚拟环境

    当我们在同一个机器上进行开发多个项目,每个项目于用到包的不同版本的时候,就很尴尬. 安装python包的命令是: sudo pip install 包名 这样的话,会将包安装到/usr/local/l ...

  7. power designer 连接mysql提示“connection test failed”

    本机环境: win10 64位 jdk8 64位 问题: 测试连接时,总是提示 根据网上搜索: 根源在于:PowerDesigner based on 32 bit JVM kernel 参考: ht ...

  8. 对于错误“Refused to execute script from '...' because its MIME type ('') is not executable, and strict MIME type checking is enabled.”的处理。

    今天在是用公司的报表插件Stimulsoft时发现的问题.之前可以正常使用,突然不能加载了.查看发现得到这个错误. 查看请求头 可以看到,请求正常响应,但是发现 Content-Type是空的,但是引 ...

  9. Linux show funny time[ liunx 有趣的东西展示]

    Linux show funny time 1.sl 奔跑吧,火车! nick-suo@ubuntu:~$ sudo apt-get install sl 2.telnet 星球大战 nick-suo ...

  10. POJ-3255 Roadblocks---Dijkstra队列优化+次短路

    题目链接: https://vjudge.net/problem/POJ-3255 题目大意: 给无向图,求1到n的次短路长度 思路: 由于边数较多,应该使用dijkstra的队列优化 用d数组存储最 ...