题目链接:https://ac.nowcoder.com/acm/contest/1083/D

题意

有一个草原可以用一个1~400的数轴表示。有n头羊和q个查询。每头羊的编号分别是1,2,3…n。第i头羊只喜爱数轴上[ai,bi]这样的一个闭区间,每一时刻每头羊只可能在自己喜爱的区间的某个点上吃草。现在给出q个查询,每个查询两个整数l,r。你需要计算出在同一时刻,最多能有多少头羊同时在这个区间内吃草。数轴上每一个整点同一时刻只能容纳一只羊,羊只会在整点吃草。

输入描述

第一行三个数n q。
第二行n个数a1 a2…an。
第三行n个数b1 b2…bn。
接下来q行每行两个数l,r。表示询问的区间。

输出描述

对于每个查询,输出一个整数表示答案。

输入

5 3
1 1 1 2 4
1 1 1 3 5
1 5
2 5
1 3

输出

3
2
2

题解

  因为每个位置只能被其中一只羊占据,所以可以将羊和位置分别看成二分图的两部分,将位置与羊匹配,如何建图?每只羊能占据的区间是给出,我们只需要将该区间的每一点连向羊,查询的时候从 l 到 r 跑一遍最大匹配即可,所以总复杂度为O(n^3)。

#include<bits/stdc++.h>
using namespace std;
#define maxn 405
#define ll long long
#define inf 1000000009
#define IOS ios::sync_with_stdio(false)struct edge
{int next,to;
}love[maxn*maxn];
int head[maxn],num;
void add(int from,int to)
{love[++num].next=head[from];love[num].to=to;head[from]=num;
}int n;//n为男孩最大值
int used[maxn], girl[maxn];//这两个数组的大小应为girl的最大值
vector<int>V;//避免对used每次memset的优化
bool find(int x)
{for (register int j = head[x]; j; j = love[j].next)  //扫描每个妹子{int v = love[j].to;if (used[v] == false)//如果有暧昧并且还没有标记过(这里标记的意思是这次查找曾试图改变过该妹子的归属问题,//但是没有成功,所以就不用瞎费工夫了){used[v] = 1;V.push_back(v);if (girl[v] == 0 || find(girl[v])){//名花无主或者能腾出个位置来,这里使用递归girl[v] = x;return true;}}}return false;
}int Hungary(int x,int y)
{int all = 0;memset(used,0,sizeof(used));memset(girl,0,sizeof(girl));for (int i = x; i <= y; i++){if (find(i))all += 1;for (int i = 0; i<V.size(); i++)used[V[i]] = false;V.clear();}return all;
}int L[maxn],R[maxn];
int main()
{IOS;int q;cin>>n>>q;for(int i=1;i<=n;i++)cin>>L[i];for(int i=1;i<=n;i++)cin>>R[i];for(int i=1;i<=n;i++)for(int j=L[i];j<=R[i];j++)add(j,i);while(q--){int x,y;cin>>x>>y;cout<<Hungary(x,y)<<"\n";}return 0;
}

牛客 羊吃草(二分图)相关推荐

  1. 羊吃草--二分图匹配

    羊吃草 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64bit IO Format: %lld 题目描述 有一个草原可以用一个1~400的数轴表 ...

  2. 羊吃草-区间端点问题

    传送门:羊吃草 题意:有n头羊在一个有[1,400]区间的草原,每头羊吃喜欢(只)吃[ai,bi]区间内的草,q次查询在[L,R]区间在一个时刻内最多有多少只羊在吃草(一个时刻羊只能在一点吃草,一点也 ...

  3. 牛客 KY48 吃糖果

    牛客 KY48 题目描述 名名的妈妈从外地出差回来,带了一盒好吃又精美的巧克力给名名(盒内共有 N 块巧克力,20 > N >0). 妈妈告诉名名每天可以吃一块或者两块巧克力. 假设名名每 ...

  4. 简单的博弈问题:牛羊吃草问题(递归解法-暴力解法)

    给定一个正整数N,表示N份青草放在一个仓库里面,有一只牛和一只羊,牛先吃,他俩轮流进行吃草,不管是牛还是羊,每一轮吃的草量,必须是 1,4,16,64.... 谁先把草吃完,谁获胜: 假设:牛和羊都是 ...

  5. 【jzoj2182】羊羊吃草

    题目描述 小羊们上完课后,纷纷到草场上吃草.而羊村现在正在进行特色示范羊村检查,领导们想看看羊村的草场. 羊村的草场是连续分布的,每块草场上都有数量不等的羊在吃草.领导们想要查看连续若干个草场,但是又 ...

  6. python娱乐 -- 源码实现 叮当猫小猪佩奇羊吃草 动画

    from turtle import *# 无轨迹跳跃 def my_goto(x, y):penup()goto(x, y)pendown()# 眼睛 def eyes():fillcolor(&q ...

  7. 奥数之“牛吃草问题”C++实现

    2019独角兽企业重金招聘Python工程师标准>>> 导读 最近在给小朋友补奥数课,顺便看了几道题目其中可以用"计算机算法"表示出来的.觉得写出来会比较集中,希 ...

  8. 牛吃草问题 (牛顿问题)

    今天参加恒生电子的笔试,前面的专业题感觉没什么难度,可后面的逻辑推理题有点坑.如果因为这个被刷的话,那就无语了. 下面说一下,我在做题过程中遇到的一个没做出来的题,牛吃草问题,题目是这样的: 有一块牧 ...

  9. 牛客练习赛51-记录

    正题 比赛链接:https://ac.nowcoder.com/acm/contest/1083#question 成绩 可怜的zycT3zycT3zycT3被n=0n=0n=0卡了半天,这里感谢一下 ...

最新文章

  1. bash命令行常用快捷键
  2. org.springframework.beans.factory.BeanCreationException 解决异常错误
  3. 【Linux 内核 内存管理】虚拟地址空间布局架构 ② ( 用户虚拟地址空间组成 | 内存描述符 mm_struct 结构体源码 )
  4. excel自动生成目录
  5. ili9341屏幕在断电一段时间后首次上电白屏问题
  6. MongoDB数据库的创建与删除
  7. html5/css3响应式页面开发总结
  8. HDU 4618 - Palindrome Sub-Array(2013MUTC2-1008)(DP)
  9. Azure认知服务之使用墨迹识别功能识别手写汉字
  10. RUNOOB python练习题19 找出1000以内的所有完数
  11. “父母双学霸, 生娃是学渣”的科学解释是什么?
  12. 【BZOJ4108】[Wf2015]Catering 有上下界费用流
  13. sunplus8202v BIN文件中LOGO的替换工具设计思路
  14. 如何实现python连续输入
  15. 绘制可视化报表技巧,免费报表工具必备!
  16. java 序列化_java的序列化机制,这一篇文章就够了
  17. 计算机语言变成乱码怎么办,电脑文本文档出现乱码,教你电脑文本文档出现乱码怎么办...
  18. SSO JA-SIG
  19. 计算机视觉的最终表现!三维重建技术
  20. Arena仿真-基于超市排队的建模分析

热门文章

  1. 中国移动应用商店在人才孵化上存有缺憾
  2. 高数下|多元函数微分学及其应用|高数叔|手写笔记
  3. C++中函数返回数组指针的几种方法总结
  4. springboot+veu实战项目-天猫整站
  5. D. Cross the Maze (网络流)
  6. 计算机汇编指令mov和mova,汇编语言中mov和lea指令的区别详解
  7. IDEA项目覆盖黄色
  8. java中的事务回滚_Spring中的事务回滚机制
  9. python 小说下载_Python之道
  10. 等保评测是什么意思?是做什么的?测评内容包含哪些?