https://vjudge.net/problem/UVA-10779

题意:n个人,m种贴纸,每个人开始有一些贴纸

第一个人可以跟任何人交换任何贴纸

其余人只能用重复的贴纸 跟第一个人交换他们没有的贴纸

问第一个人最后最多有多少种贴纸

关键点:其余人只能从第一个人手中得到一张他们没有的贴纸,每种贴纸 最多给第一个人 这种贴纸数-1张

建图:

第一个人向它有的贴纸连边,流量为他有的贴纸数量

每一种贴纸向汇点连流量为1的边

其余人,如果没有贴纸i,由i向这个人连一条流量为1的边,

如果贴纸i数量>1,由这个人向i连一条流量为数量-1的边

#include<queue>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 40
#define M 3000
using namespace std;
int sum[N];
int front[N],to[M],nxt[M],tot;
int cap[M],lev[N],cur[N];
int decc,src;
queue<int>q;
void add(int u,int v,int w)
{
to[++tot]=v; nxt[tot]=front[u]; front[u]=tot; cap[tot]=w;
to[++tot]=u; nxt[tot]=front[v]; front[v]=tot; cap[tot]=;
}
bool bfs()
{
while(!q.empty()) q.pop();
for(int i=;i<=decc;i++) lev[i]=-,cur[i]=front[i];
lev[src]=;
q.push(src);
int now;
while(!q.empty())
{
now=q.front(); q.pop();
for(int i=front[now];i;i=nxt[i])
{
if(lev[to[i]]==-&&cap[i]>)
{
lev[to[i]]=lev[now]+;
if(to[i]==decc) return true;
q.push(to[i]);
}
}
}
return false;
}
int dinic(int now,int flow)
{
if(now==decc) return flow;
int rest=,delta;
for(int &i=cur[now];i;i=nxt[i])
{
if(lev[to[i]]>lev[now]&&cap[i]>)
{
delta=dinic(to[i],min(flow-rest,cap[i]));
if(delta)
{
cap[i]-=delta; cap[i^]+=delta;
rest+=delta; if(rest==flow) break;
}
}
}
if(rest==flow) lev[now]=-;
return rest;
}
int main()
{
int T, n,m,x,k;
scanf("%d",&T);
for(int p=;p<=T;p++)
{
tot=; src=;
memset(front,,sizeof(front));
scanf("%d%d",&n,&m);
decc=n+m+;
for(int i=;i<=m;i++) add(n+i,decc,); scanf("%d",&k);
memset(sum,,sizeof(sum));
while(k--)
{
scanf("%d",&x);
sum[x]++;
}
for(int i=;i<=m;i++)
if(sum[i]) add(,n+i,sum[i]); for(int i=;i<=n;i++)
{
memset(sum,,sizeof(sum));
scanf("%d",&k);
while(k--)
{
scanf("%d",&x);
sum[x]++;
}
for(int j=;j<=m;j++)
if(sum[j]>) add(i,n+j,sum[j]-);
else if(!sum[j])add(n+j,i,);
}
int ans=;
while(bfs()) ans+=dinic(src,);
printf("Case #%d: %d\n",p,ans);
}
}

UVA-10779 Collectors Problem的更多相关文章

  1. UVA 10779 Collectors Problem(最大流)

    这个题是很难往网络流上面构思的... 从s向每个物品增加容量为Bob拥有数的弧,然后从每个物品向t增加容量为1的弧(代表种类个数).这时候跑最大流的话,得到的肯定是Bob拥有的初始种类数.那么交换后的 ...

  2. uva 10779 Collectors Problem 网络流

    链接 一共有n个人, m种收藏品, 每个人拥有的收藏品的种类和个数都是不相同的. 假设2-n这些人都只和1互相交换, 比例是1:1, 并且, 2-n这些人, 只换自己现在没有的, 如果他现在有第二种, ...

  3. AC日记——Collectors Problem uva 10779

    UVA - 10779 思路: 最大流: s向所有的贴纸的种类连边,流量为Bob拥有的数量: 然后,Bob的朋友如果没有这种贴纸,则这种贴纸向bob的朋友连边,容量1: 如果bob的朋友的贴纸很多大于 ...

  4. UVA 10779 (最大流)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=33631 题目大意:Bob有一些贴纸,他可以和别人交换,他可以把自己 ...

  5. uva 11991 - Easy Problem from Rujia Liu?(STL)

    option=com_onlinejudge&Itemid=8&page=show_problem&problem=3142" target="_blank ...

  6. CJOJ 2485 UVa 11991 生日礼物 / UVa 11991 Easy Problem from Rujia Liu?

    CJOJ 2485 UVa 11991 生日礼物 / UVa 11991 Easy Problem from Rujia Liu? Description (原题来自刘汝佳<训练指南>Pa ...

  7. UVa 11991:Easy Problem from Rujia Liu?(STL练习,map+vector)

    Easy Problem from Rujia Liu? Though Rujia Liu usually sets hard problems for contests (for example, ...

  8. UVA 11991 Easy Problem from Rujia Liu?(vector map)

    Easy Problem from Rujia Liu? Though Rujia Liu usually sets hard problems for contests (for example, ...

  9. [UVA] 11991 - Easy Problem from Rujia Liu? [STL应用]

    11991 - Easy Problem from Rujia Liu? Time limit: 1.000 seconds Problem E Easy Problem from Rujia Liu ...

  10. UVA 11991 Easy Problem from Rujia Liu?【STL】

    题目链接: option=com_onlinejudge&Itemid=8&page=show_problem&problem=3142">https://uv ...

随机推荐

  1. 石家庄铁道大学网站首页UI分析

    今天的软件工程王老师讲了UI的设计,以前狭隘的认为只有移动设备上的界面叫UI,百度一下才发现UI其实有这么多含义:UI即User Interface的简称.泛指用户的操作界面,UI设计主要指界面的样式 ...

  2. 《IT小小鸟》读后感

    我是来自大一的小小鸟,想要飞却没有一对坚硬的臂膀! 看了<IT小小鸟>了解了学长和学姐们的大学经历后开始让我反思我的大学生活.学长和学姐们通过自身的经历来告诉我们,应该怎么样规划好大学生涯 ...

  3. Kotlin在处理GET和POST请求的数据问题

    1.网络请求获取到的数据流处理 java写法 BufferedReader br = new BufferedReader(new InputStreamReader(in, "utf-8& ...

  4. laravel5.6 调用第三方类库

    大概流程: 1. 新建一个目录方类库 2. 配置composer配置文件 3. 在项目中使用终端运行composer  dumpautoload 4. 使用时 方法调用可以new对象后->方法名 ...

  5. ubuntu下安装 openssl&&编译运行测试代码

    检查是否已安装 openssl: sudo apt-get install openssl 如果已安装执行以下操作:sudo apt-get install libssl-devsudo apt-ge ...

  6. PHP中大括号用法

    Php中"{}"大括号的用法总结 在PHP中,大括号“{}”可以起到如下作用: 1.将多个独立语句合并为一个复合语句,例如 if ... else ...中经常如此使用 2.在变量 ...

  7. 【Python】tuple and list 练习

    Tuple: 1.       __add__ a = (,,,,,,,,,) b = (,,,,,,,), c = (,,,,), result = a.__add__(b) print(resul ...

  8. 【uoj#48】[UR #3]核聚变反应强度 数论

    题目描述 给出一个长度为 $n$ 的数列 $a$ ,求 $a_1$ 分别与 $a_1...a_n$ 的次大公约数.不存在则输出-1. 输入 第一行一个正整数 $n$ . 第二行 $n$ 个用空格隔开的 ...

  9. [十二]SpringBoot 之 servlet

    Web开发使用 Controller 基本上可以完成大部分需求,但是我们还可能会用到 Servlet.Filter.Listener.Interceptor 等等. 当使用spring-Boot时,嵌 ...

  10. Elasticsearch在windows上安装好了之后怎么使用?

    windows 10上安装Elasticsearch过程记录 一.安装和配置Java JDK1.下载:http://download.oracle.com/otn ... 4.exe2.设置环境变量: ...