建图才是王道,建完图就是裸最大流问题了

建图参考:

http://wenku.baidu.com/view/0ad00abec77da26925c5b01c.html

/*最大流问题*/

#include <iostream>
#include <cstdio>
#include <queue>
#include <cstring>
using namespace std;

int c[105][105];
int a[105];
int flow[105][105];
int pre[105];
int pig[1005];
bool visit[1005];
int previsitor[1005];

int m,n;
const int inf = 100000000;

void init()
{
    for(int i = 0;i<1005;i++)
    {
        previsitor[i] = 0;
        visit[i] = false;
        pig[i] = 0;
    }
    for(int i = 0;i<105;i++)
       {
           for(int j = 0;j<105;j++)
            {
                c[i][j] = 0;
                flow[i][j] = 0;
            }
           a[i] = 0;
           pre[i] =0;
       }
}

int maxFlow()
{
    int ans = 0;
    queue<int>q;
    while(1)
    {
        memset(a,0,sizeof(a));
        q.push(0);
        a[0] = inf;
        while(!q.empty())
        {
            int temp = q.front();
            q.pop();
            for(int i = 1;i<=n+1;i++)
            {
                if(!a[i]&&c[temp][i]>flow[temp][i])
                {
                    if(c[temp][i]-flow[temp][i]<a[temp])
                    {
                        a[i] = c[temp][i] - flow[temp][i];
                    }
                    else
                        a[i] = a[temp];
                    pre[i] = temp;
                    q.push(i);
                }
            }
        }
        if(a[n+1]==0)
            break;
        for(int i = n+1;i!=0;i=pre[i])
        {
            flow[pre[i]][i] += a[n+1];
            flow[i][pre[i]] -= a[n+1];
        }
        ans+=a[n+1];
    }
    return ans;
}

int main()
{
    while(scanf("%d %d",&m,&n)!=EOF)
    {
        init();
        for(int i = 1;i<=m;i++)
        {
            scanf("%d",&pig[i]);
        }
        for(int i = 1;i<=n;i++)
        {
            int A,B,room;
            scanf("%d",&A);
            for(int j = 0;j<A;j++)
            {
                scanf("%d",&room);
                if(!visit[room])
                {
                    visit[room] = true;
                    c[0][i] += pig[room];
                    previsitor[room] = i;
                }
                else
                {
                    c[previsitor[room]][i] = inf;
                    previsitor[room] = i;
                }
            }
            scanf("%d",&B);
            c[i][n+1] = B;
        }
        int ans = maxFlow();
        printf("%d\n",ans);
    }
    return 0;
}

poj 1149 PIG相关推荐

  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

    POJ_1149 这个题目搞得我比较纠结,具体的思想还是看看这篇博客吧. http://imlazy.ycool.com/post.2059102.html #include<stdio.h&g ...

  4. POJ 1149 最大流建图 PIGS

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

  5. POJ 1149(最大流)

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

  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. 网络流(所有常用类型网络流算法的模板)

    网络流 网络流算法讲解 关键代码讲解 最大流 EK Dinic ISAP 无源汇 无源汇上下界可行流 有源汇 有源汇上下界可行流 有源汇上下界最大流 有源汇上下界最小流 多源汇 多源汇最大流 费用流 ...

最新文章

  1. [转载]Google用户体验设计准则
  2. maven 安装本地jar_使用Maven安装本地jar
  3. Error: Cannot find module 'json-schema-faker' YAPI部署
  4. mysql 自动分表_Mysql Event 自动分表
  5. 一加Nord 2配置细节曝光:天玑1200芯片+5000万像素旗舰主摄
  6. 喷水装置2(nyoj12)
  7. java 控制线程的顺序_【Java多线程系列四】控制线程执行顺序
  8. Win11之C盘终极清理工具
  9. 苹果核 - iOS端Mock GPS定位 —— 测试、开发、玩游戏、发朋友圈等等,你都用得上...
  10. 平面设计计算机基本配置,2017平面设计使用的电脑配置
  11. 手机木马以及移动安全
  12. java计算机毕业设计评标专家管理信息系统源程序+mysql+系统+lw文档+远程调试
  13. 简易中控紫猫插件版(2)基本思路介绍
  14. matlab由滤波的系数得到传输函数 设计带通滤波器 design fdatool设计IIR带通滤波器
  15. 微信服务器拒绝发送离线文件,解答:微信怎么接收QQ离线消息?-qq离线文件
  16. RED5与tomcat整合
  17. 2022校园春季招聘自带内推码投递链接合集
  18. LuceneElasticSeach
  19. 科技云报道:2022年,产业互联网如何重建安全边界?
  20. 计算机图形学2--光栅扫描系统

热门文章

  1. 最大似然法,贝叶斯估计、最小错误贝叶斯决策Excel数据分类处理(介绍+Python实现)
  2. java-php-python-智慧校园实习岗位需求对接网络平台计算机毕业设计
  3. 内向者优势 原版_性格内向的人如何笑傲职场?职业规划三步走,为你铺平道路...
  4. 大学英语口语测试软件,大学英语口语测试技巧
  5. 小米12sPro和小米12SUltra哪个值得买 两者配置对比
  6. GUI Guider设计UI界面移植到STM32
  7. 北大数学系“扫地僧”韦东奕爆红!拒绝哈佛 offer,留任北大,却因长相引热议...
  8. 真正的人工智能已经存在吗
  9. Oracle游标共享,父游标和子游标的概念
  10. ubuntu启动无法进系统:emergency mode! After logging in, type journalctl -xb to view system logs,