poj3281 拆点+网络流
来源:互联网 发布:网络红猫 编辑:程序博客网 时间:2024/05/16 15:38
和上题一样,水过。
代码:
#include<iostream>#include<cstring>#include<cstdio>#define MAXN 815#define INF 1e8#define min(a,b) (a<b?a:b)#define max(a,b) (a>b?a:b)using namespace std;struct edge{ int u,v,w,next;}E[200000];int head[MAXN],ecnt;int gap[MAXN],cur[MAXN],pre[MAXN],dis[MAXN];int l,r,mid;int N,M,scr,sink,vn,num;int k,c1,m;void Insert(int u,int v,int w){ E[ecnt].u=u; E[ecnt].v=v; E[ecnt].w=w; E[ecnt].next=head[u]; head[u]=ecnt++; E[ecnt].u=v; E[ecnt].v=u; E[ecnt].w=0; E[ecnt].next=head[v]; head[v]=ecnt++;}int Sap(int s,int t,int n)//核心代码(模版){ int ans=0,aug=INF;//aug表示增广路的流量 int i,v,u=pre[s]=s; for(i=0;i<=n;i++) { cur[i]=head[i]; dis[i]=gap[i]=0; } gap[s]=n; bool flag; while(dis[s]<n) { flag=false; for(int &j=cur[u];j!=-1;j=E[j].next)//一定要定义成int &j,why { v=E[j].v; if(E[j].w>0&&dis[u]==dis[v]+1) { flag=true;//找到容许边 aug=min(aug,E[j].w); pre[v]=u; u=v; if(u==t) { ans+=aug; while(u!=s) { u=pre[u]; E[cur[u]].w-=aug; E[cur[u]^1].w+=aug;//注意 } aug=INF; } break;//找到一条就退出 } } if(flag) continue; int mindis=n; for(i=head[u];i!=-1;i=E[i].next) { v=E[i].v; if(E[i].w>0&&dis[v]<mindis) { mindis=dis[v]; cur[u]=i; } } if((--gap[dis[u]])==0) break; gap[dis[u]=mindis+1]++; u=pre[u]; } return ans;}int n,f,d;int main(){ while(scanf("%d%d%d",&n,&f,&d)!=EOF) { memset(head,-1,sizeof(head));ecnt=0; scr=0;sink=f+d+2*n+1;vn=sink+1; for(int i=1;i<=f;i++) Insert(scr,i,1); for(int i=1;i<=d;i++) Insert(i+f,sink,1); for(int i=1;i<=n;i++) { Insert(i+d+f,i+d+f+n,1); int x,y;int v; scanf("%d%d",&x,&y); for(int j=1;j<=x;j++) { scanf("%d",&v); Insert(v,i+f+d,1); } for(int j=1;j<=y;j++) { scanf("%d",&v); Insert(i+f+d+n,v+f,1); } } printf("%d\n",Sap(scr,sink,vn)); } return 0;}
- poj3281--网络流 + 拆点
- poj3281 拆点+网络流
- poj3281——Dining(网络流+拆点)
- (拆点+最大流)POJ3281 Dining
- POJ3281 Dining (拆点+最大流)
- POJ3281 拆点 最大流 EK算法
- POJ3281 网络流 dining
- poj3281网络流
- poj3281网络流
- 【POJ3281】Dining 网络流
- [网络流]poj3281 Dining
- POJ3281 Dining【网络流】
- poj3281 Dining(经典最大流+拆点)
- POJ3281 Dining(网络流)
- poj3281 网络流(拆点加源)
- poj3281(#网络流最大流)
- poj3281 dining 网络流最大流算法
- POJ3281 Dining 网络流建图
- OnNcCalcSize改变标题栏等的高度
- vc 字体的创建
- 增加swap空间
- 0042算法笔记——【随机化算法】计算π值和计算定积分
- 深入浅出UML类图
- poj3281 拆点+网络流
- hibernate一级缓存和二级缓存的区别
- 如何在Ubuntu安装EXE文件
- DXP 使用总结
- 显示来客IP地址代码
- 总结几道经典面试笔试题
- 算法导论-----散列表
- 跟我一起写 Makefile(五)
- Event.hbm.xml和hibernate.cfg.xml