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. 《Linux内核分析》学习总结与学习心得

    一.目录列表 第一周:计算机是如何工作的? http://www.cnblogs.com/dvew/p/5224866.html 第二周:操作系统是如何工作的? http://www.cnblogs. ...

  2. 利用p4实现ipv6转发实验

    写在前面 只是作为一个入门p4的实验尝试,借用了一些即成的运行代码. p4代码 /**p4_16,v1_model**/ #include<core.p4> #include<v1m ...

  3. OOP 1.2 const关键字

    1.2 const关键字 1.常量 指针常量 定义常量:const 类型 =值 定义指针常量:const *类型=值 常量指针不可通过常量指针修改其指向的内容 可直接修改其指向的内容 常量指针的指向可 ...

  4. VS2013安装及单元测试

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZ0AAAIlCAIAAACBzLJwAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAgAE ...

  5. inux下mysql的root密码忘记解决方法

    1.首先确认服务器出于安全的状态,也就是没有人能够任意地连接MySQL数据库. 因为在重新设置MySQL的root密码的期间,MySQL数据库完全出于没有密码保护的 状态下,其他的用户也可以任意地登录 ...

  6. Oracle数据库表空间常用操作

    1. 查看所有表空间大小 SQL> select tablespace_name,sum(bytes)/1024/1024 from dba_data_files group by tables ...

  7. webgl学习笔记二-绘图多点

    写在前面 建议先看下第一篇webgl学习笔记一-绘图单点 第一篇文章,介绍了如何用webgl绘图一个点.接下来本文介绍的是如何绘制多个点.形成一个面. webgl提供了一种很方便的机制,即缓冲区对象, ...

  8. bzoj4754[JSOI2016]独特的树叶

    这个题....别人写得怎么都....那么短啊? 我怎么....WA了好几次啊....怎么去loj扒了数据才调出来啊? 这个算法...怎么我还是不知道对不对啊 怎么回事啊怎么回事啊怎么回事啊? 请无视上 ...

  9. 两个list比较相等元素

    1.实现方式 public class list { public static void main(String[] args) { List<String> list1 = new A ...

  10. QT模态对话框及非模态对话框

    QT模态对话框及非模态对话框 模态对话框(Modal Dialog)与非模态对话框(Modeless Dialog)的概念不是Qt所独有的,在各种不同的平台下都存在.又有叫法是称为模式对话框,无模式对 ...