UVa10779 Collectors' Problem( 网络流,建图)

来源:互联网 发布:乐知英语培训学费 编辑:程序博客网 时间:2024/05/29 16:10

这是一道建图的题,只要能想清楚怎么建图,就没有问题

建图:Bob和所有粘贴相连,边的容量是他所拥有粘贴的个数;

            其他人和他们所拥有的粘贴相连,边容量为手中物品个数减1,因为他们要保留一个

            其他人没有的粘贴,从粘贴连到这个人,容量为1,他只能接受一个这种粘贴

            每种粘贴和汇点相连,容量为1

代码如下:

#include <cstdio>#include <cstring>#include <queue>#include <algorithm>using namespace std;const int inf = 99999999;const int Maxn = 40;int S, E, T, n, m;int map[Maxn][Maxn], flow[Maxn][Maxn], a[Maxn], p[Maxn];void buildMap() {    int ki, t;    for ( int i = 1; i <= n; ++i ) {        scanf("%d", &ki);        for ( int j = 0; j < ki; ++j ) {              scanf("%d", &t);            t += n;             map[i][t]++;        }        if ( i > 1 ) for ( int j = n + 1; j <= n + m; ++j )             if ( map[i][j] ) map[i][j]--;            else if ( map[i][j] == 0 ) map[j][i]++;    }    for ( int i = n + 1; i <= n + m; ++i ) map[i][E]++; //将表示物品的点和汇点相连,容量为1}int maxFlow() {    queue < int > q; int f = 0;    memset( flow, 0, sizeof(flow) );    while(1) {        memset( a, 0, sizeof(a) );        a[S] = inf;        q.push( S );        while( !q.empty() ) {            int u = q.front(); q.pop();            for( int v = 1; v <= m + n + 1; ++v ) {                if ( !a[v] && map[u][v] > flow[u][v] ) {                    p[v] = u; q.push(v);                    a[v] = min(a[u], map[u][v] - flow[u][v]);                }            }        }        if ( a[E] == 0 ) break;        for ( int u = E; u != S; u = p[u] ) {            flow[p[u]][u] += a[E];            flow[u][p[u]] -= a[E];        }        f += a[E];    }    return f;}int main(){    int icase = 1;    while ( scanf("%d", &T) != EOF ) {        while ( T-- ) {            scanf("%d%d", &n, &m);            memset( map, 0, sizeof(map) );            S = 1, E = m + n + 1;            buildMap();            printf("Case #%d: %d\n", icase++, maxFlow());        }    }}


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 汽车被刮了油漆怎么办 车被轻微刮花了怎么办 车被故意刮花了怎么办 车子自己刮花了怎么办 刚买的新车刮了怎么办 40周胎盘才一级怎么办 没感情了想离婚怎么办 对老公没感情了怎么办 和老公没感情了怎么办 跟老公没感情了怎么办 对老公感情淡了怎么办 和老公感情淡了怎么办 脖子又短又粗怎么办 18岁胸越来越小怎么办 觉得自己变丑了怎么办 我的皮肤很黑怎么办 喝老婆奶水会硬怎么办 真的很讨厌老公怎么办 老婆很讨厌我了怎么办 2岁泰迪牙齿掉了怎么办 4岁泰迪门牙掉了怎么办 种牙寿命结束后怎么办 后面的牙齿掉了怎么办 门牙齿掉了一颗怎么办 隆鼻后鼻头歪了怎么办 狗狗呕吐有虫子怎么办 狗狗呕吐出虫子怎么办 借债人无力还钱怎么办 微博被盗用了怎么办 我的眼袋很严重怎么办 怀孕了吐的很厉害怎么办 老婆怀孕吐的很厉害怎么办 孕妇6个月肚子疼怎么办 孕妇7个月肚子疼怎么办 辣椒吃多了胃疼怎么办 大腿内侧磨烂了怎么办 左脸腮帮子肿了怎么办 牙痛肿了半边脸怎么办 轮胎完全没气了怎么办 晚上车胎没气了怎么办 皇冠车胎没气了怎么办