传送门

貌似是最大流建图优化入门题(可惜我还是不会)

最暴力的建图当然是源点连每个猪圈然后猪圈需要拆成n个点分给每个人这个必定是跑不过的

所以我们可以进行优化

很明显没有被动过的猪圈一直是不变的可以不用拆

然后两个顾客之间开了同一扇门可以互通有无的话那么他们之间可以连一条inf的边来进行这个操作

我们发现一个人打开多个没被打开过的猪圈可以直接把这些猪圈合并起来

所以最后我们从源点连出来的是顾客!

我们把所有猪圈之间的流动全部变成了边

所以最后我们的点数是N+2个

边数最多是M条(互通有无)

就可以解决这道题了

(神仙优化想不出想不出)

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
#define inf 20021225
#define ll long long
using namespace std;struct edge{int to,lt,f;}e[3020];
int in[110],cnt=1,s,t;
queue<int> que;
int dep[110];
void add(int x,int y,int f)
{e[++cnt].to=y;e[cnt].lt=in[x];e[cnt].f=f;in[x]=cnt;e[++cnt].to=x;e[cnt].lt=in[y];e[cnt].f=0;in[y]=cnt;
}
bool bfs()
{while(!que.empty())    que.pop();memset(dep,0,sizeof(dep));dep[s]=1;que.push(s);while(!que.empty()){int x=que.front();que.pop();for(int i=in[x];i;i=e[i].lt){int y=e[i].to;if(!dep[y]&&e[i].f){dep[y]=dep[x]+1;if(y==t)   return 1;que.push(y);}}}return 0;
}
int dfs(int x,int flow)
{if(x==t||!flow)  return flow;int cur=flow;for(int i=in[x];i;i=e[i].lt){int y=e[i].to;if(dep[y]==dep[x]+1&&e[i].f){int tmp=dfs(y,min(cur,e[i].f));cur-=tmp;e[i].f-=tmp;e[i^1].f+=tmp;if(!cur){dep[x]=-1;return flow;}}}dep[x]=-1;return flow-cur;
}
int dinic()
{int ans=0;while(bfs())ans+=dfs(s,inf);return ans;
}
int n,m,ltz[1001],pig[1001];
int main()
{int a,c,k,i,j,tot;scanf("%d%d",&m,&n);s=n+1;t=s+1;for(i=1;i<=m;i++)   scanf("%d",&pig[i]);for(i=1;i<=n;i++){scanf("%d",&a);tot=0;for(j=1;j<=a;j++){scanf("%d",&k);if(!ltz[k])    tot+=pig[k];else  add(ltz[k],i,inf);ltz[k]=i;}scanf("%d",&c);add(s,i,tot);add(i,t,c);}printf("%d\n",dinic());return 0;
}

转载于:https://www.cnblogs.com/hanyuweining/p/10321956.html

POJ1149PIGS相关推荐

  1. POJ1149-PIGS

    1,从各个顾客到汇点各有一条边,容量就是各个顾客能买的数量上限. 2,在某一轮中,从该顾客打开的所有猪圈都有一条边连向该顾客,容量都是∞. 3,最后一轮除外,从每一轮的i号猪圈都有一条边连向下一轮的i ...

  2. POJ-1149-PIGS(最大流 标号法)

    PIGS Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 20033 Accepted: 9179 Description Mir ...

最新文章

  1. redis常用命令参考
  2. 【解决方案】Basemap安装出现的错误(Python)
  3. php的ajax实例
  4. [信息学奥赛一本通-T1620]质因数分解-数论
  5. Parhaps you are running on a JRE rather than a JDK?
  6. aspose word 转pdf中文乱码_pdf转word——都是乱码!怎么办
  7. 解决 Laravel/Lumen 出现 Please provide a valid cache path 问题
  8. lazy-mock ,一个生成后端模拟数据的懒人工具 1
  9. 《深入浅出struts》读书笔记(3)
  10. 概率论——马尔科夫链
  11. 各种字体.效果和名字对应图. --- by 王朋
  12. springboot实现邮箱验证
  13. 浅入浅出 1.7和1.8的 HashMap
  14. QT计算函数运行时间,精确到ms和us
  15. IJCAI 阿里论文 | 基于改进注意力循环控制门 品牌个性化排序升级
  16. 这六种性格类型的人,在职场是很难获得升迁的。
  17. 李佳琦推荐口红火了,我总结出“印章式”产品设计的精髓
  18. 光模块SFP+与SFP、XFP、QSFP、QSFP+的区别
  19. 引脚间距是0.4mmBGA(WLCSP)封装的芯片怎么打孔走线
  20. ICML2017全部接受论文列表(内含paper分类)

热门文章

  1. [转载] java自定义异常类以及全局log打印
  2. day1-4js算术运算符及类型转化
  3. BZOJ.4500.矩阵(差分约束 SPFA判负环 / 带权并查集)
  4. phpmyadmin安全预防
  5. centos7-每天定时备份 mysql数据库
  6. 怎么在Ubuntu下设置程序的快捷键
  7. 使用EDITPLUS编写C#控制台应用程序
  8. 前端笔记 | CSS进阶
  9. c++访问私有(private)成员变量的常用方法
  10. 详说sizeof与strlen的区别与联系