洛谷——P2417 课程
P2417 课程
裸地匈牙利算法,
贪心的不断匹配,若没匹配,则匹配;反之,判断与之匹配的点能否在找另一个点匹配,若能,抢多这个点与之匹配
时间复杂度$O(n\times m)$
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define N 2000000
using namespace std; struct node{
int to,next;
}e[N];
int t,head[N],tot,p,n,match[N],dfn[N],ans; void add(int u,int v){
e[++tot].to=v,e[tot].next=head[u],head[u]=tot;
} bool dfs(int u,int t){
for(int i=head[u];i;i=e[i].next){
int v=e[i].to;
if(dfn[v]!=t){
dfn[v]=t;
if(!match[v]||dfs(match[v],t)){
match[v]=u;return true;
}
}
}
return false;
} int main()
{
scanf("%d",&t);
while(t--){
memset(head,,sizeof(head));
memset(match,,sizeof(match));
memset(dfn,,sizeof(dfn));
tot=ans=;
scanf("%d%d",&p,&n);
for(int m,v,i=;i<=p;i++){
scanf("%d",&m);
for(int j=;j<=m;j++){
scanf("%d",&v),add(v,i);
}
}
for(int i=;i<=n;i++)
if(dfs(i,i)) ++ans;
if(ans>=p) printf("YES\n");
else printf("NO\n");
} return ;
}
P2071 座位安排
模板,又是模板,建图方式有一点儿不同,因为每一排有两个座位
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define N 2000000
using namespace std; struct node {
int to,next;
} e[N];
int t,head[N],tot,p,n,match[N],dfn[N],ans; void add(int u,int v) {
e[++tot].to=v,e[tot].next=head[u],head[u]=tot;
} bool dfs(int u,int t) {
for(int i=head[u]; i; i=e[i].next) {
int v=e[i].to;
if(dfn[v]!=t) {
dfn[v]=t;
if(!match[v]||dfs(match[v],t)) {
match[v]=u;
return true;
}
}
}
return false;
} int main() {
memset(head,,sizeof(head));
memset(match,,sizeof(match));
memset(dfn,,sizeof(dfn));
tot=ans=;
scanf("%d",&n);
for(int x,y,i=; i<=n*; i++) {
scanf("%d%d",&x,&y);
add(i,x),add(i,x+n),add(i,y),add(i,y+n);
}
for(int i=; i<=n*; i++)
if(dfs(i,i)) ++ans;
printf("%d\n",ans); return ;
}
P1894 [USACO4.2]完美的牛栏The Perfect Stall
裸题
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define N 2000000
using namespace std; struct node {
int to,next;
} e[N];
int t,head[N],tot,m,n,match[N],dfn[N],ans; void add(int u,int v) {
e[++tot].to=v,e[tot].next=head[u],head[u]=tot;
} bool dfs(int u,int t) {
for(int i=head[u]; i; i=e[i].next) {
int v=e[i].to;
if(dfn[v]!=t) {
dfn[v]=t;
if(!match[v]||dfs(match[v],t)) {
match[v]=u;
return true;
}
}
}
return false;
} int main() {
memset(head,,sizeof(head));
memset(match,,sizeof(match));
memset(dfn,,sizeof(dfn));
tot=ans=;
scanf("%d%d",&n,&m);
for(int v,x,i=; i<=n; i++) {
scanf("%d",&x);
for(int j=;j<=x;j++) {
scanf("%d",&v);
add(i,v);
}
}
for(int i=; i<=n; i++)
if(dfs(i,i)) ++ans;
printf("%d\n",ans); return ;
}
洛谷——P2417 课程的更多相关文章
- 洛谷—— P2417 课程
https://www.luogu.org/problemnew/show/2417 题目描述 n个学生去p个课堂,每一个学生都有自己的课堂,并且每个学生只能去一个课堂,题目要求能够安排每一个课堂都有 ...
- [洛谷P2417]课程
题目链接: 点我 题目分析: 二分图最大匹配裸题,跑完匈牙利判断\(ans\)是否等于教室数即可 多组数据请注意初始化. 代码: #include<bits/stdc++.h> #defi ...
- USACO Section 1.3 题解 (洛谷OJ P1209 P1444 P3650 P2693)
usaco ch1.4 sort(d , d + c, [](int a, int b) -> bool { return a > b; }); 生成与过滤 generator&& ...
- 洛谷 P2014 选课(树形背包)
洛谷 P2014 选课(树形背包) 思路 题面:洛谷 P2014 如题这种有依赖性的任务可以用一棵树表示,因为一个儿子要访问到就必须先访问到父亲.然后,本来本题所有树是森林(没有共同祖先),但是题中的 ...
- 树形DP 洛谷P2014 选课
洛谷P2014 选课 题目描述 在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程来学习,在课程里有些课程必须在某些课程之前学习,如高等数学总是在其它课程之前学习.现在有N门功课,每门 ...
- C++ 洛谷 2014 选课 from_树形DP
洛谷 2014 选课 没学树形DP的,看一下. 首先要学会多叉树转二叉树. 树有很多种,二叉树是一种人人喜欢的数据结构,简单而且规则.但一般来说,树形动规的题目很少出现二叉树,因此将多叉树转成二叉树就 ...
- 洛谷1640 bzoj1854游戏 匈牙利就是又短又快
bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...
- 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.
没有上司的舞会 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...
- 洛谷P1108 低价购买[DP | LIS方案数]
题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...
随机推荐
- jsp请求转发小例子(转载)
在服务器端对客户端请求时行转发对其它的对象,如果jsp网页或Servlet 用三个 jsp网页来演示转发: forword1.jsp, 用来提交表单, 将表单内容提交给 forwrod2.jsp, ...
- Log4j日志等级
Log4j根据日志信息的重要程度,分OFF.FATAL.ERROR.WARN.INFO.DEBUG.ALL 当然再细分的话 还有 FATAL(严重错误), 但是Log4j官方建议实际实用的话,Log4 ...
- Linux 常用命令十五 用户和组操作命令
一.创建一个用户 wang@wang:~/workpalce/threading$ sudo useradd -m python # -m创建家目录 wang@wang:~/workpalce/thr ...
- ACM复习专项
资料整理 ACM训练营 邝斌的ACM模板 牛客网哈理工ACM教学视频 视频网盘资料(密码:kntr) 1. 训练阶段 第一阶段:练习经典常用算法 (本周任务) 1. 最短路(Floyd.Dijstra ...
- Codeforces Round #318 [RussianCodeCup Thanks-Round] (Div. 2)
以后每做完一场CF,解题报告都写在一起吧 暴力||二分 A - Bear and Elections 题意:有n个候选人,第一个候选人可以贿赂其他人拿到他们的票,问最少要贿赂多少张票第一个人才能赢 ...
- 找规律 Codeforces Round #309 (Div. 2) A. Kyoya and Photobooks
题目传送门 /* 找规律,水 */ #include <cstdio> #include <iostream> #include <algorithm> #incl ...
- 题解报告:poj 2299 Ultra-QuickSort(BIT求逆序数)
Description In this problem, you have to analyze a particular sorting algorithm. The algorithm proce ...
- Android 线程池系列教程(1)目录
Sending Operations to Multiple Threads 1.Dependencies and prerequisites Android 3.0 (API Level 11) o ...
- CentOS安装GlassFish4.0 配置JDBC连接MySQL
转自:http://linux.it.net.cn/CentOS/course/2014/0724/3319.html 版本glassfish-4.0.zip 1.解压,拷贝到指定安装路径 unz ...
- jmeter(九)分布式测试
Jmeter 是java 应用,对于CPU和内存的消耗比较大,因此,当需要模拟数以千计的并发用户时,使用单台机器模拟所有的并发用户就有些力不从心,甚至会引起JAVA内存溢出错误.为了让jmeter工具 ...