hdu - 1083 - Courses
题意:有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的更多相关文章
- HDU 1083 Courses 【二分图完备匹配】
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1083 Courses Time Limit: 20000/10000 MS (Java/Others) ...
- HDU 1083 - Courses - [匈牙利算法模板题]
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1083 Time Limit: 20000/10000 MS (Java/Others) M ...
- HDU - 1083 Courses /POJ - 1469
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1083 http://poj.org/problem?id=1469 题意:给你P个课程,并且给出每个课 ...
- HDU 1083 Courses(二分图匹配模板)
http://acm.hdu.edu.cn/showproblem.php?pid=1083 题意:有p门课和n个学生,每个学生都选了若干门课,每门课都要找一个同学来表演,且一个同学只能表演一门课,判 ...
- hdu 1083 Courses (最大匹配)
CoursesTime Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Su ...
- HDU 1083 Courses(最大匹配模版题)
题目大意: 一共有N个学生跟P门课程,一个学生可以任意选一 门或多门课,问是否达成: 1.每个学生选的都是不同的课(即不能有两个学生选同一门课) 2.每门课都有一个代表(即P门课都被成功选过 ...
- hdu 1083 Courses(二分图最大匹配)
题意: P门课,N个学生. (1<=P<=100 1<=N<=300) 每门课有若干个学生可以成为这门课的代表(即候选人). 又规定每个学生最多只能成为一门课的代 ...
- HUD——1083 Courses
HUD——1083 Courses Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Ot ...
- (匹配)Courses -- hdu --1083
链接: http://acm.hdu.edu.cn/showproblem.php?pid=1083 http://acm.hust.edu.cn/vjudge/contest/view.action ...
随机推荐
- SQL Server 连接和事务相关的问题。
方法 1. dbcc opentran + sys.dm_exec_connections dbcc opentran; dbcc opentran 针对当前数据库 dbcc opentran('St ...
- NHbiernate 配置
1.从网上下载NHibernate 4.0 文件.下载地址:https://sourceforge.net/projects/nhibernate/ 2.解压后把 NHibernate.dll文件引用 ...
- Oracle前10条记录
在Oracle怎样查询表中的top10条记录呢? select * from test where rownum <=10 下面是关于rownum的介绍 ==================== ...
- JAVA反射学习网摘
程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言".从这个观点看,Perl,Python,Ruby是动态语言,C++,Java,C#不是动态语言.但是JAVA有着一个非常突出的动 ...
- Java泛型介绍!!!
Java总结篇系列:Java泛型 转自:http://www.cnblogs.com/lwbqqyumidi/p/3837629.html 一. 泛型概念的提出(为什么需要泛型)? 首先,我们看下下 ...
- Lipschitz连续【zz】
转载地址:http://moosewoler.blog.163.com/blog/static/6986605201242643122296/ 李普希兹连续是以德国数学家Rudolf Lipschit ...
- Fire Net(dfs)
Fire Net Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Su ...
- ExecuteReader(),ExecuteNonQuery(),ExecuteScalar(),ExecuteXmlReader()之间的区别
本文来自:http://www.cnblogs.com/zhouxiaxue/archive/2006/05/12/398266.html http://www.cnblogs.com/yaoxc/a ...
- OAuth2.0服务器端的实现
authorize 授权关系存储表字段 备注appid 应用IDuserid 用户IDaddtime 添加时间…… 其他表3 access_token 访问令牌存储表字段 备注access_token ...
- ZCTF-final-restaurant1
和线上赛的题目差别不大,但是需要自己去泄露堆的地址.除了线上赛的溢出之外,还多了一个Use After Free的洞.我写了两种利用方法. 线上赛writeup见:http://www.cnblogs ...