题目链接:http://hihocoder.com/problemset/problem/1393

把项目到汇点的边权值都加起来,跑完最大流后看是否最大流=权值和。如果等于权值和说明所有项目都有足够的人参与。

 #include <bits/stdc++.h>
using namespace std; typedef struct Edge {
int u, v, w, next;
}Edge;
const int inf = 0x7f7f7f7f;
const int maxn = ;
const int maxm = ;
int cnt, dhead[maxn];
int cur[maxn], dd[maxn];
Edge dedge[maxm];
int S, T, N; void init() {
memset(dhead, -, sizeof(dhead));
for(int i = ; i < maxn; i++) dedge[i].next = -;
cnt = ;
} void adde(int u, int v, int w, int c1) {
dedge[cnt].u = u; dedge[cnt].v = v; dedge[cnt].w = w;
dedge[cnt].next = dhead[u]; dhead[u] = cnt++;
dedge[cnt].u = v; dedge[cnt].v = u; dedge[cnt].w = c1;
dedge[cnt].next = dhead[v]; dhead[v] = cnt++;
} bool bfs(int s, int t, int n) {
queue<int> q;
for(int i = ; i < n; i++) dd[i] = inf;
dd[s] = ;
q.push(s);
while(!q.empty()) {
int u = q.front(); q.pop();
for(int i = dhead[u]; ~i; i = dedge[i].next) {
if(dd[dedge[i].v] > dd[u] + && dedge[i].w > ) {
dd[dedge[i].v] = dd[u] + ;
if(dedge[i].v == t) return ;
q.push(dedge[i].v);
}
}
}
return ;
} int dinic(int s, int t, int n) {
int st[maxn], top;
int u;
int flow = ;
while(bfs(s, t, n)) {
for(int i = ; i < n; i++) cur[i] = dhead[i];
u = s; top = ;
while(cur[s] != -) {
if(u == t) {
int tp = inf;
for(int i = top - ; i >= ; i--) {
tp = min(tp, dedge[st[i]].w);
}
flow += tp;
for(int i = top - ; i >= ; i--) {
dedge[st[i]].w -= tp;
dedge[st[i] ^ ].w += tp;
if(dedge[st[i]].w == ) top = i;
}
u = dedge[st[top]].u;
}
else if(cur[u] != - && dedge[cur[u]].w > && dd[u] + == dd[dedge[cur[u]].v]) {
st[top++] = cur[u];
u = dedge[cur[u]].v;
}
else {
while(u != s && cur[u] == -) {
u = dedge[st[--top]].u;
}
cur[u] = dedge[cur[u]].next;
}
}
}
return flow;
} int n, m;
int a, b, v; int main() {
// freopen("in", "r", stdin);
int Q;
scanf("%d", &Q);
while(Q--) {
scanf("%d%d",&n,&m);
S = , T = n + m + ; N = n + m + ;
init();
int ss = ;
for(int i = ; i <= m; i++) {
scanf("%d", &a);
ss += a;
adde(i+n, T, a, );
}
for(int i = ; i <= n; i++) {
scanf("%d %d", &a, &b);
adde(S, i, a, );
for(int j = ; j < b; j++) {
scanf("%d", &v);
adde(i, n+v, , );
}
}
int ret = dinic(S, T, N);
if(ret == ss) puts("Yes");
else puts("No");
}
return ;
}

[HIHO1393]网络流三·二分图多重匹配的更多相关文章

  1. hihoCoder 1393 网络流三·二分图多重匹配(Dinic求二分图最大多重匹配)

    #1393 : 网络流三·二分图多重匹配 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 学校的秋季运动会即将开始,为了决定参赛人员,各个班又开始忙碌起来. 小Hi和小H ...

  2. [HihoCoder1393]网络流三·二分图多重匹配

    题目大意: 班级有$N$名学生,运动会有$M$项不同的比赛,第$i$项比赛每个班需要派出$m_i$名选手参加,编号为i的学生最多同时参加给定的$b_i$项比赛中的任意$a_i$项比赛.根据统计的结果, ...

  3. hiho 第117周 二分图多重匹配,网络流解决

    描述 学校的秋季运动会即将开始,为了决定参赛人员,各个班又开始忙碌起来. 小Hi和小Ho作为班上的班干部,统计分配比赛选手的重任也自然交到了他们手上. 已知小Hi和小Ho所在的班级一共有N名学生(包含 ...

  4. 网络流24题 第五题 - PowerOJ1740 CodeVS1905 圆桌问题 二分图多重匹配 网络最大流

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - PowerOJ1740 - 有SPJ - 推荐 题目传送门 - CodeVS1905 - 无SPJ - 0% ...

  5. 【网络流24题】No.7 试题库问题 (最大流,二分图多重匹配)

    [题意] 假设一个试题库中有 n 道试题. 每道试题都标明了所属类别. 同一道题可能有多个类别属性.现要从题库中抽取 m 道题组成试卷.并要求试卷包含指定类型的试题. 试设计一个满足要求的组卷算法. ...

  6. 稳定的奶牛分配 && 二分图多重匹配+二分答案

    题意: 农夫约翰有N(1<=N<=1000)只奶牛,每只奶牛住在B(1<=B<=20)个奶牛棚中的一个.当然,奶牛棚的容量有限.有些奶牛对它现在住的奶牛棚很满意,有些就不太满意 ...

  7. poj 2289 Jamie's Contact Groups【二分+最大流】【二分图多重匹配问题】

    题目链接:http://poj.org/problem?id=2289 Jamie's Contact Groups Time Limit: 7000MS   Memory Limit: 65536K ...

  8. kuangbin带你飞 匹配问题 二分匹配 + 二分图多重匹配 + 二分图最大权匹配 + 一般图匹配带花树

    二分匹配:二分图的一些性质 二分图又称作二部图,是图论中的一种特殊模型. 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j ...

  9. 【POJ 1698】Alice's Chance(二分图多重匹配)

    http://poj.org/problem?id=1698 电影和日子匹配,电影可以匹配多个日子. 最多有maxw*7个日子. 二分图多重匹配完,检查一下是否每个电影都匹配了要求的日子那么多. #i ...

随机推荐

  1. 由LazyMan联想到的

    LazyMan问题与解法 http://mp.weixin.qq.com/s/drNGvLZddQztcUzSh8OsSw 给出了一道题目,并给出了解法: 题目: 实现一个LazyMan,可以按照以下 ...

  2. GPS部标监控平台的架构设计(八)-基于WCF的平台数据通信设计

    总体来讲,GPS部标平台的软件开发是一个对网络通信和应用程序之间通信的技术应用密集型的开发工作,也是有一定设计技术含量的工作. 1.设计通信接口 在设计的时候,根据职责划分,拆分成不同的应用子系统,对 ...

  3. 在设置app icon时的问题

    APP 运行时遇到 the app icon set named appicon did not have any applicable content 是应该考虑是icon可能偏大

  4. Windows 服务为宿主的WCF服务,详细图解。

    废话不多说,直接进入主题: 1.打开vs2010新建项目,选择Windows服务. 2.选中WindowsService右击,添加WCF服务. 3.添加成功后,为下图.将接口类ITestService ...

  5. zjuoj 3780 Paint the Grid Again

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3780 Paint the Grid Again Time Limit: 2 ...

  6. C# 利用SQLite对.DB和.logdb加密和解密和SQLite创建数据库

    1.最近研究了下利用SQLite为db文件简单的加密和解密 private static SQLiteConnection GetConnection() { SQLiteConnection con ...

  7. ASPX开发基础

    ASP.NET:.net开发网站应用程序的技术总称,分为WebForm和MVC 表单元素: 文本类:(1)<input type=“text”/> 文本框 (2)<input typ ...

  8. 华盛顿大学 Programming Languages

    表达式三要素: 语法,类型和计算值.

  9. Linux 环境变量PS1设置

    新建用户不显示IP和机器名 CentOS下新增加一个用户,登录进去会发现shell脚本信息没有显示用户名和主机名,反而显示的是user1@202.173.1.12 解决方案: 1.在新建用户的-目录下 ...

  10. 当display=none时,元素和子元素高度为0的解决办法

    在前端中为了某种需要,我们需要获取display=none的元素或者子元素的实际高度来进行某些处理,然而html对display=none的元素和子元素是不进行渲染的,如果我们没有规定这些元素的高度那 ...