[HIHO1393]网络流三·二分图多重匹配
题目链接: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]网络流三·二分图多重匹配的更多相关文章
- hihoCoder 1393 网络流三·二分图多重匹配(Dinic求二分图最大多重匹配)
#1393 : 网络流三·二分图多重匹配 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 学校的秋季运动会即将开始,为了决定参赛人员,各个班又开始忙碌起来. 小Hi和小H ...
- [HihoCoder1393]网络流三·二分图多重匹配
题目大意: 班级有$N$名学生,运动会有$M$项不同的比赛,第$i$项比赛每个班需要派出$m_i$名选手参加,编号为i的学生最多同时参加给定的$b_i$项比赛中的任意$a_i$项比赛.根据统计的结果, ...
- hiho 第117周 二分图多重匹配,网络流解决
描述 学校的秋季运动会即将开始,为了决定参赛人员,各个班又开始忙碌起来. 小Hi和小Ho作为班上的班干部,统计分配比赛选手的重任也自然交到了他们手上. 已知小Hi和小Ho所在的班级一共有N名学生(包含 ...
- 网络流24题 第五题 - PowerOJ1740 CodeVS1905 圆桌问题 二分图多重匹配 网络最大流
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - PowerOJ1740 - 有SPJ - 推荐 题目传送门 - CodeVS1905 - 无SPJ - 0% ...
- 【网络流24题】No.7 试题库问题 (最大流,二分图多重匹配)
[题意] 假设一个试题库中有 n 道试题. 每道试题都标明了所属类别. 同一道题可能有多个类别属性.现要从题库中抽取 m 道题组成试卷.并要求试卷包含指定类型的试题. 试设计一个满足要求的组卷算法. ...
- 稳定的奶牛分配 && 二分图多重匹配+二分答案
题意: 农夫约翰有N(1<=N<=1000)只奶牛,每只奶牛住在B(1<=B<=20)个奶牛棚中的一个.当然,奶牛棚的容量有限.有些奶牛对它现在住的奶牛棚很满意,有些就不太满意 ...
- poj 2289 Jamie's Contact Groups【二分+最大流】【二分图多重匹配问题】
题目链接:http://poj.org/problem?id=2289 Jamie's Contact Groups Time Limit: 7000MS Memory Limit: 65536K ...
- kuangbin带你飞 匹配问题 二分匹配 + 二分图多重匹配 + 二分图最大权匹配 + 一般图匹配带花树
二分匹配:二分图的一些性质 二分图又称作二部图,是图论中的一种特殊模型. 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j ...
- 【POJ 1698】Alice's Chance(二分图多重匹配)
http://poj.org/problem?id=1698 电影和日子匹配,电影可以匹配多个日子. 最多有maxw*7个日子. 二分图多重匹配完,检查一下是否每个电影都匹配了要求的日子那么多. #i ...
随机推荐
- Open Close Principle 开闭合原则
- js暂停的函数
// numberMillis 毫秒 function sleep(numberMillis) { var now = new Date(); var exitTime = now.getTime() ...
- DataTables样式
Styling 官方链接 AdminLTE HTML代码 <div class="row"> <div class="col-xs-12"&g ...
- 解决Windows下网络原因Composer安装失败问题
由于Composer镜像都在国外,所以直接在官网下载Windows Installer后安装很多情况下是无法成功安装的. 解决办法: 1,将php添加到系统环境变量,并开启openssl扩展. 2,点 ...
- NSUserDefaults存取失败
解决办法: 1.存储NSUserDefaults时,强制NSUserDefault存入沙盒 [[NSUserDefaults standardUserDefaults] setObject:sAcco ...
- iOS,几种设计模式
1.单例模式 2.观察者模式 3.委托代理 4.block回调 5.反射机制 单例模式 iOS单例模式的2种方式.根据线程安全的实现来区分,一种是使用@synchronized ,另一种是使用GCD的 ...
- winserver2008 DNS 很详细
from http://www.it165.net/admin/html/201312/2182.html DNS(Domain Name System域名系统)区域化管理 分布式 层次性 域名空间结 ...
- Web页面中5种超酷的Hover效果
hover 效果能给网页增加一些动态效果,并且使得站点更具有活力.原来的做法是使用javascript来实现这些动态效果,但是随着CSS3的引入和现代浏览器 的支持,我们可以用纯粹的CSS代码来实现这 ...
- 移动端 触摸事件 ontouchstart、ontouchmove、ontouchend、ontouchcancel
1.Touch事件简介 pc上的web页面鼠 标会产生onmousedown.onmouseup.onmouseout.onmouseover.onmousemove的事件,但是在移动终端如 ipho ...
- Windows Phone 十三、吐司通知
弹出通知对话框 <Grid> <Button Content="弹出通知" Click="Button_Click"/> </Gr ...