题意:有P门课程,N个学生,每门课程有一些学生选读,每个学生选读一些课程,问能否选出P个学生组成一个委员会,使得每个学生代言一门课程(他必需选读其代言的课程),每门课程都被一个学生代言(1 <= P <= 100,1 <= N <= 300) 。

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1083

——>>第一次自己想出的网络流。。。虽然是水题,但也开心死死。。。

建图:设超级源S,S到每门课程连一条边,容量为1;每门课程向其选读的学生各连一条边,容量为1;每个学生向超级汇连一条边,容量为1。

这样,只要求一次最大流,判断其是否为满流P就好。。。

#include <cstdio>
#include <queue>
#include <algorithm>
#include <cstring> using namespace std; const int maxn = 400 + 10;
const int maxm = 60800 + 10;
const int INF = 0x3f3f3f3f; int head[maxn], nxt[maxm], ecnt, v[maxm], flow[maxm], cap[maxm];
bool flag[maxn]; struct Dinic{
int m, s, t;
int d[maxn], cur[maxn];
bool vis[maxn]; Dinic(){
memset(head, -1, sizeof(head));
ecnt = 0;
} void addEdge(int uu, int vv, int ca){
v[ecnt] = vv; cap[ecnt] = ca; flow[ecnt] = 0; nxt[ecnt] = head[uu]; head[uu] = ecnt; ecnt++;
v[ecnt] = uu; cap[ecnt] = 0; flow[ecnt] = 0; nxt[ecnt] = head[vv]; head[vv] = ecnt; ecnt++;
} bool bfs(){
d[s] = 0;
memset(vis, 0, sizeof(vis));
queue<int> qu;
qu.push(s);
vis[s] = 1;
while(!qu.empty()){
int u = qu.front(); qu.pop();
for(int e = head[u]; e != -1; e = nxt[e]){
if(!vis[v[e]] && cap[e] > flow[e]){
d[v[e]] = d[u] + 1;
vis[v[e]] = 1;
qu.push(v[e]);
}
}
}
return vis[t];
} int dfs(int u, int a){
if(u == t || a == 0) return a;
int f, Flow = 0;
for(int e = cur[u]; e != -1; e = nxt[e]){
cur[u] = e;
if(d[v[e]] == d[u] + 1 && (f = dfs(v[e], min(a, cap[e]-flow[e]))) > 0){
flow[e] += f;
flow[e^1] -= f;
Flow += f;
a -= f;
if(!a) break;
}
}
return Flow;
} int Maxflow(int s, int t){
this->s = s;
this->t = t;
int Flow = 0;
while(bfs()){
memcpy(cur, head, sizeof(head));
Flow += dfs(s, INF);
}
return Flow;
} }; int main()
{
int T, P, N, S, cnt;
scanf("%d", &T);
while(T--){
Dinic din;
scanf("%d%d", &P, &N);
for(int i = 1; i <= P; i++){
din.addEdge(0, i, 1);
scanf("%d", &cnt);
for(int j = 1; j <= cnt; j++){
scanf("%d", &S);
din.addEdge(i, P+S, 1);
}
}
for(int i = 1; i <= N; i++) din.addEdge(P+i, P+N+1, 1);
if(din.Maxflow(0, P+N+1) == P) puts("YES");
else puts("NO");
}
return 0;
}

hdu - 1083 - Courses的更多相关文章

  1. HDU 1083 Courses 【二分图完备匹配】

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1083 Courses Time Limit: 20000/10000 MS (Java/Others)  ...

  2. HDU 1083 - Courses - [匈牙利算法模板题]

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1083 Time Limit: 20000/10000 MS (Java/Others) M ...

  3. HDU - 1083 Courses /POJ - 1469

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1083 http://poj.org/problem?id=1469 题意:给你P个课程,并且给出每个课 ...

  4. HDU 1083 Courses(二分图匹配模板)

    http://acm.hdu.edu.cn/showproblem.php?pid=1083 题意:有p门课和n个学生,每个学生都选了若干门课,每门课都要找一个同学来表演,且一个同学只能表演一门课,判 ...

  5. hdu 1083 Courses (最大匹配)

    CoursesTime Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...

  6. HDU 1083 Courses(最大匹配模版题)

    题目大意: 一共有N个学生跟P门课程,一个学生可以任意选一 门或多门课,问是否达成:    1.每个学生选的都是不同的课(即不能有两个学生选同一门课)   2.每门课都有一个代表(即P门课都被成功选过 ...

  7. hdu 1083 Courses(二分图最大匹配)

    题意: P门课,N个学生.     (1<=P<=100    1<=N<=300) 每门课有若干个学生可以成为这门课的代表(即候选人). 又规定每个学生最多只能成为一门课的代 ...

  8. HUD——1083 Courses

    HUD——1083   Courses Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Ot ...

  9. (匹配)Courses -- hdu --1083

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=1083 http://acm.hust.edu.cn/vjudge/contest/view.action ...

随机推荐

  1. poj 1018 Communication System_贪心

    题意:给你n个厂,每个厂有m个产品,产品有B(带宽),P(价格),现在要你求最大的 B/P 明显是枚举,当P大于一定值,B/P为零,可以用这个剪枝 #include <iostream> ...

  2. poj 3230 Travel(dp)

    Description One traveler travels among cities. He has to pay for this while he can get some incomes. ...

  3. Swift类与结构、存储属性、计算属性、函数与方法、附属脚本等

    写了12个Person来复习,不过完成同样的代码需要敲键盘的次数相比OC确实少了很多,这很多应该归功于Swift中不写分号,以及少了OC中的中括号. 一.类与结构体 两者在Swift中差不了多少了 类 ...

  4. Mobile Web开发 处理设备的横竖屏

    为了应对移动设备屏幕的碎片化,我们在开发Mobile Web应用时,一个最佳实践就是采用流式布局,保证最大可能地利用有限的屏幕空间.由于屏幕存在着方向性,用户在切换了屏幕的方向后,有些设计上或实现上的 ...

  5. netty demo

    Netty 4.0 demo   netty是一个异步,事件驱动的网络编程框架&工具,使用netty,可以快速开发从可维护,高性能的协议服务和客户端应用.是一个继mina之后,一个非常受欢迎的 ...

  6. mvn profile 深层次目录打参数核心配置

    <build> <resources> <resource> <directory>src/main/resources</directory&g ...

  7. JavaScript 中 关于 this 的学习笔记

    今天上午主要学习了js中的 this ,因为之前学习面向对象时,this这个东西出现的还是很频繁的,理解的很不透彻,感觉老被JAVA的思想带进坑里,所以对它特别关注. 首先贴一个大神的一篇博客,我是通 ...

  8. java调用Command命令

    ----------- import java.io.BufferedReader; import java.io.InputStreamReader; /** * 此类用来执行Command命令 * ...

  9. Genymotion error:The virtual device got no IP address

    控制面板,网络和intent,网络和共享中心,更改适配器设置,看下你的VirtualBox Host-Only Ethernet Adapter这个显卡 启动了没有, 没有就启动它!!!

  10. C#面向对象 基础概念25个

    1.静态成员和非静态成员的区别?2.const 和 static readonly 区别?3.extern 是什么意思?4.abstract 是什么意思?5.internal 修饰符起什么作用?6.s ...