POJ_1149

这个题目搞得我比较纠结,具体的思想还是看看这篇博客吧。

http://imlazy.ycool.com/post.2059102.html

#include<stdio.h>#include<string.h>#define MAXD 110#define MAXM 30010#define MAXm 1010#define INF 10000000int N, M, S, T, e, first[MAXD], work[MAXD], next[MAXM], v[MAXM], flow[MAXM], d[MAXD], q[MAXD];int g[MAXD][MAXD], pre[MAXm], cow[MAXm];void add(int x, int y, int z){    v[e] = y;    flow[e] = z;    next[e] = first[x];    first[x] = e;    e ++;}void init(){int i, j, k, n;    e = 0;    S = 0, T = N + 1;    memset(first, -1, sizeof(first));    memset(g, 0, sizeof(g));    memset(pre, 0, sizeof(pre));for(i = 1; i <= M; i ++)        scanf("%d", &cow[i]);for(i = 1; i <= N; i ++)    {        scanf("%d", &n);for(j = 0; j < n; j ++)        {            scanf("%d", &k);if(k > M)continue;if(!pre[k])                g[0][i] += cow[k];else                g[pre[k]][i] = 1;            pre[k] = i;        }        scanf("%d", &k);        add(i, T, k);        add(T, i, 0);    }for(i = 1; i <= N; i ++)if(g[0][i])        {            add(0, i, g[0][i]);            add(i, 0, 0);        }for(i = 1; i <= N; i ++)for(j = i + 1; j <= N; j ++)if(g[i][j])            {                add(i, j, INF);                add(j, i, 0);            }}int bfs(){int i, j, k, rear = 0;    memset(d, -1, sizeof(d));    d[S] = 0;    q[rear ++] = S;for(i = 0; i < rear; i ++)for(j = first[q[i]]; j != -1; j = next[j])if(flow[j] > 0 && d[v[j]] == -1)            {                d[v[j]] = d[q[i]] + 1;if(v[j] == T)return 1;                q[rear ++] = v[j];            }return 0;}int dfs(int cur, int a){if(cur == T)return a;for(int &i = work[cur]; i != -1; i = next[i])if(flow[i] > 0 && d[v[i]] == d[cur] + 1)if(int t = dfs(v[i], a < flow[i] ? a : flow[i]))            {                flow[i] -= t;                flow[i ^ 1] += t;return t;            }return 0;}void solve(){int i, j, k, t, cnt = 0;while(bfs())    {        memcpy(work, first, sizeof(first));while(t = dfs(S, INF))            cnt += t;    }    printf("%d\n", cnt);}int main(){while(scanf("%d%d", &M, &N) == 2)    {        init();        solve();    }return 0;}

转载于:https://www.cnblogs.com/staginner/archive/2012/01/17/2324239.html

POJ 1149 PIGS相关推荐

  1. POJ 1149 PIGS 最大流建模

    点击打开链接 PIGS Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 14204   Accepted: 6305 Desc ...

  2. poj 1149 PIGS【最大流】

    建图:s向所有猪圈的第一个顾客连流量为这个猪圈里住的数量,然后对于之后每个来这个猪圈的顾客,由他前一个顾客向他连边权为无穷的边,然后每个顾客向t连流量为这个顾客购买上限的边.然后跑最大流 #inclu ...

  3. POJ 1149 最大流建图 PIGS

    题意: 给出猪圈个数 m 和买家人数 n 然后给出m个猪圈的猪的头数.. 接下来 n 行.. 给出mm a1 a2 .. a(mm) k 例如 2 1 5 3 表示第i+1个用户 有mm(2) 个猪圈 ...

  4. POJ 1149(最大流)

    这道题应该都能想到朴素的有n*m+个点的建图方案吧,呵呵,显然是不行的. 那么怎么办? 其实我们可以这样想:一个人能买到的猪有两个来源: ①来自自己第一次打开的猪圈 ②来自之前别人打开的猪圈 想到了这 ...

  5. poj 1149 PIG

    建图才是王道,建完图就是裸最大流问题了 建图参考: http://wenku.baidu.com/view/0ad00abec77da26925c5b01c.html /*最大流问题*/ #inclu ...

  6. poj pku图论、网络流入门题总结、汇总

    poj pku图论.网络流入门题总结.汇总 分类: acm图论 2010-08-25 18:49 243人阅读 评论(0) 收藏 举报 网络算法networkgraphconstructioninte ...

  7. POJ 图论分类 + DP(较全 自己又加了点)

    DP -----------动态规划 状态压缩DP 2411 (棋盘规模较大)状态压缩DP+DFS+滚动数组 2664 (棋盘规模较小)直接递推即可(DP) 2506 (棋盘规模较小)直接递推即可(D ...

  8. 网络流建模汇总(转自Edelweiss)

    最大流 <POJ 1149    PIGS> [题目大意] 有 M 个猪圈,每个猪圈里初始时有若干头猪.一开始所有猪圈都是关闭的.依 次来了 N  个顾客,每个顾客分别会打开指定的几个猪圈 ...

  9. 【转载】图论 500题——主要为hdu/poj/zoj

    转自--http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...

最新文章

  1. 使用dom4j解析XML例子
  2. 老司机 iOS 周报 #24 | 2018-06-25
  3. 独白:我为什么要从BTC转向支持BCH?
  4. 向maven中央仓库提交jar
  5. javascript构造函数继承
  6. EasyExcel中输出为时间格式
  7. ELK Stack 与 Elastic Stack 的异同点
  8. html表情选择器,原生JS写的emoji表情选择器
  9. 多线程下不能用truncate吗_那么多的化妆品,怀孕后都不能用了吗?
  10. 麦克风失灵_iPhone7Plus手机麦克风失灵怎么办?请看解决方案
  11. 计算机与应用化学ppt,应用化学专用课件.ppt
  12. eclipse优化运行速度_IPFS:强化公共DHT以抵抗eclipse攻击
  13. C++大小端转换程序
  14. python列索引行的数据公式_python中pandas数据分析基础3(数据索引、数据分组与分组运算、数据离散化、数据合并)...
  15. 支付宝小程序 - 基于芝麻信用分免押金操作流程
  16. ps快速抠头发-庞姿姿
  17. 华为云为基因检测保驾护航,助力健康行业发展
  18. adc网络语什么意思_王者荣耀adc什么意思 王者荣耀游戏术语全解
  19. 部署高校房屋管理系统可以实现哪些目标?
  20. 超声波测距传感器认知

热门文章

  1. Configured broker.id 2 doesn‘t match stored broker.id 3 in meta.properties
  2. apache/nginx/tomcat的区别
  3. codeblocks运行结果输出的对话框字体太小的问题
  4. scipy实现的共轭梯度法以及相关原理图解
  5. spark 常用函数介绍(python)
  6. NLTK的图形化语料文本下载器downloader
  7. 数据结构:哈希表函数构造和冲突解决方法
  8. java redis 商品秒杀_redis编写lua脚本实现商品秒杀
  9. c语言指定大小分割文件,C语言实现智能文件分割
  10. 服务器的共享文件夹怎么隐藏,Server200服务器隐藏共享文件夹 隐藏共享文件的方法...