UVA-10779 Collectors Problem
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的更多相关文章
- UVA 10779 Collectors Problem(最大流)
这个题是很难往网络流上面构思的... 从s向每个物品增加容量为Bob拥有数的弧,然后从每个物品向t增加容量为1的弧(代表种类个数).这时候跑最大流的话,得到的肯定是Bob拥有的初始种类数.那么交换后的 ...
- uva 10779 Collectors Problem 网络流
链接 一共有n个人, m种收藏品, 每个人拥有的收藏品的种类和个数都是不相同的. 假设2-n这些人都只和1互相交换, 比例是1:1, 并且, 2-n这些人, 只换自己现在没有的, 如果他现在有第二种, ...
- AC日记——Collectors Problem uva 10779
UVA - 10779 思路: 最大流: s向所有的贴纸的种类连边,流量为Bob拥有的数量: 然后,Bob的朋友如果没有这种贴纸,则这种贴纸向bob的朋友连边,容量1: 如果bob的朋友的贴纸很多大于 ...
- UVA 10779 (最大流)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=33631 题目大意:Bob有一些贴纸,他可以和别人交换,他可以把自己 ...
- uva 11991 - Easy Problem from Rujia Liu?(STL)
option=com_onlinejudge&Itemid=8&page=show_problem&problem=3142" target="_blank ...
- CJOJ 2485 UVa 11991 生日礼物 / UVa 11991 Easy Problem from Rujia Liu?
CJOJ 2485 UVa 11991 生日礼物 / UVa 11991 Easy Problem from Rujia Liu? Description (原题来自刘汝佳<训练指南>Pa ...
- 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, ...
- 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, ...
- [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 ...
- UVA 11991 Easy Problem from Rujia Liu?【STL】
题目链接: option=com_onlinejudge&Itemid=8&page=show_problem&problem=3142">https://uv ...
随机推荐
- Thunder团队——bug修正
团队:欢迎来怼 发现的问题: 1.首先用户通过爱阅APP内部的网址跳转到各大电子书网站时,需要额外启动手机自身浏览器:就以豆瓣网为例,阅读豆瓣网上的一些书籍,是跳转到手机自带浏览器的,APP内部提供的 ...
- 软件工程 - 第二十次作业 Alpha 事后诸葛亮(团队)
Alpha 事后诸葛亮(团队) 组长本次作业链接:https://www.cnblogs.com/dawnduck/p/10056026.html 现代软件工程 项目Postmortem 设想和目标 ...
- UITableViewCell contentView layoutSubviews 死循环
发现一个问题,当在UITableViewCell 的 layoutSubviews 中修改 contentView 的frame时会产生死循环.该问题只会出现在iOS8中,iOS7与iOS9均没有问题 ...
- Ansible基础配置与常用模块使用
环境介绍: Ansible服务端IP:192.168.2.215 Ansible客户端IP:192.168.2.216.192.168.2.218.192.168.2.113 一.创建Ansibl ...
- websocket服务器+客户端
<?php $demo = new ws('192.168.90.47',12345); $demo->run(); class ws { //当前服务端主连接 private $curr ...
- FastReport.Net 无限页高(连续纸小票)
using System; using System.Collections; using System.Collections.Generic; using System.ComponentMode ...
- css 层加透明度后文字依然清晰
background: rgba(, , , !important; /*实现FF背景透明,文字不透明*/ filter: Alpha(opacity=); background: #0a0a0a; ...
- 转---秒杀多线程第八篇 经典线程同步 信号量Semaphore
阅读本篇之前推荐阅读以下姊妹篇: <秒杀多线程第四篇一个经典的多线程同步问题> <秒杀多线程第五篇经典线程同步关键段CS> <秒杀多线程第六篇经典线程同步事件Event& ...
- 程序猿必备技能:数据库管理——关于MySQL
一.初识MySQL 1.什么是数据库? 数据库(Database,DB)简而言之就是存放数据的仓库,是为了实现一定目的,按照某种规则组织起来的数据的集合. 2.使用数据库的必要性 (1)结构化存储大量 ...
- GLSL反转矩阵inverse
低版本 vertex shader 可以使用,通常用来反转TBN矩阵,但是计算量很大. 代码来自 OpenGL Mathematics (GLM) mat4 inverse_mat4(mat4 m) ...