P1986 元旦晚会——贪心或差分约束系统
每个人可能属于不同的声部,每个声部最少要有c[i]个人发声;
求最少需要多少话筒;
首先贪心,将所有声部的区间按照右端点大小排序,如果右端点相同,左端点从小到大排序;
贪心每次选取靠近右端点的,这样每个区间相交的是最多的。
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=; struct node
{
int l,r,c;
}a[maxn]; bool cmp(node qw,node we)
{
if(qw.r!=we.r) return qw.r<we.r;
return qw.l<we.l;
} int n,m;
int ans,vis[maxn]; int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)
{
scanf("%d%d%d",&a[i].l,&a[i].r,&a[i].c);
} sort(a+,a+m+,cmp); for(int i=;i<=m;i++)
{
int k=;
for(int j=a[i].r;j>=a[i].l;j--)
{
if(vis[j]) k++;
} if(k>=a[i].c) continue;
else
{
for(int h=a[i].r;(h>=a[i].r-a[i].c+)&&(k<a[i].c);h--)
{
if(!vis[h])
{
vis[h]=;
ans++;
k++;
} }
}
}
printf("%d",ans);
return ;
}
差分约束系统:
将左右端点连边,边权是c[i];因为要保持图的联通,实际连边是x-1和y;
将i和i-1连一条-1的边,将i和i+1连一条0边;
跑一边最长路即为所求答案。
我们所求的实际上是不等式dis[y]-dis[x]>=c[i];
求最长路时的松弛操作正是将这个不等式一点点的满足;
为什么要将i和i-1连-1边呢?
因为可能是这种情况:
-1其实是将重合的部分减去
#include<cstring>
#include<cstdio>
#include<queue>
#include<algorithm>
using namespace std;
const int maxn=1e6+;
int pre[maxn*],last[maxn],other[maxn*],len[maxn*],l; void add(int x,int y,int z)
{
l++;
pre[l]=last[x];
last[x]=l;
other[l]=y;
len[l]=z;
} queue<int> q;
int n,m;
int dis[maxn];
bool vis[maxn];
void spfa()
{
while(!q.empty())
{
int x=q.front();
q.pop();
vis[x]=;
for(int p=last[x];p;p=pre[p])
{
int v=other[p];
if(dis[v]<dis[x]+len[p])
{
dis[v]=dis[x]+len[p];
if(!vis[v]) vis[v]=,q.push(v);
}
}
}
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)
{
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
add(x-,y,z);
}
for(int i=;i<=n;i++)
{
add(i,i-,-);
add(i-,i,);
}
for(int i=;i<=n;i++) q.push(i),vis[i]=;
spfa();
printf("%d",dis[n]);
return ;
}
P1986 元旦晚会——贪心或差分约束系统的更多相关文章
- P1986 元旦晚会
一道可以用各种各样的办法做的(水)题 在这里就介绍两种做法 题意: 自己看看吧,很明显的意思,就是求前i个人最少有多少个话筒. 解法1:差分约束 设\(dis[i]\)表示前\(i\)个人最少有多少个 ...
- UVA11478 Halum [差分约束系统]
https://vjudge.net/problem/UVA-11478 给定一个有向图,每条边都有一个权值.每次你可以选择一个结点v和一个整数d,把所有以v为终点的边的权值减小d,把所有以v为起点的 ...
- BZOJ 2330: [SCOI2011]糖果 [差分约束系统] 【学习笔记】
2330: [SCOI2011]糖果 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 5395 Solved: 1750[Submit][Status ...
- ACM/ICPC 之 差分约束系统两道(ZOJ2770-POJ1201)
当对问题建立数学模型后,发现其是一个差分方程组,那么问题可以转换为最短路问题,一下分别选用Bellmanford-SPFA解题 ZOJ2770-Burn the Linked Camp //差分约束方 ...
- POJ1201 Intervals(差分约束系统)
与ZOJ2770一个建模方式,前缀和当作点. 对于每个区间[a,b]有这么个条件,Sa-Sb-1>=c,然后我就那样连边WA了好几次. 后来偷看数据才想到这题还有两个隐藏的约束条件. 这题前缀和 ...
- UVA 11374 Halum (差分约束系统,最短路)
题意:给定一个带权有向图,每次你可以选择一个结点v 和整数d ,把所有以v为终点的边权值减少d,把所有以v为起点的边权值增加d,最后要让所有的边权值为正,且尽量大.若无解,输出结果.若可无限大,输出结 ...
- Burn the Linked Camp(bellman 差分约束系统)
Burn the Linked Camp Time Limit: 2 Seconds Memory Limit: 65536 KB It is well known that, in the ...
- zoj 2770 Burn the Linked Camp (差分约束系统)
// 差分约束系统// 火烧连营 // n个点 m条边 每天边约束i到j这些军营的人数 n个兵营都有容量// Si表示前i个军营的总数 那么 1.Si-S(i-1)<=C[i] 这里 建边(i- ...
- POJ 3169 Layout (差分约束系统)
Layout 题目链接: Rhttp://acm.hust.edu.cn/vjudge/contest/122685#problem/S Description Like everyone else, ...
随机推荐
- 微信小程序通讯录字母排序
微信小程序通讯录 字母排序效果: demo地址:https://github.com/PeachCoder/wechat-contacts
- SVM-支持向量机总结
一.SVM简介 (一)Support Vector Machine 支持向量机(SVM:Support Vector Machine)是机器学习中常见的一种分类算法. 线性分类器,也可以叫做感知机,其 ...
- REST,以及RESTful的讲解
详见:https://blog.csdn.net/qq_21383435/article/details/80032375 1.传统下的API接口对比规则概念REST 系统的特征演化优点&缺点 ...
- c# 字段成员
- C++——多维数组动态开辟与释放
前言 在讨论多维数组动态开辟与释放之前,先说说什么是二维数组静态开辟与释放. 形如这种就是静态开辟内存,事先画好了内存大小 #include<iostream> using namespa ...
- 1.Git & GitHup
1.常见的版本控制(管理代码的版本迭代)工具: @ svn:集中式版本控制系统: SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里 ...
- PHP开启目录引索+fancyindex漂亮目录浏览带搜索功能
PHP开启目录引索 一. 前言 不知为何对nginx情有独钟, 最近练习php, 为了方便写代码, 便想要开启nginx的目录索引功能, 显然不如Apache开启的方便, 几次尝试都崩了... 我这个 ...
- GPT分区格式
1. GPT定义 全局唯一标识分区表(GUID partition table, 缩写:GPT)是一个实体硬盘的分区表的结构布局的标准.它是可扩展固件接口(UEFI)标准的一部分,被用于替代BIOS系 ...
- Spring Boot 2发送邮件手把手图文教程
原文:http://www.itmuch.com/spring-boot/send-email/ 本文基于:Spring Boot 2.1.3,理论支持Spring Boot 2.x所有版本. 最近有 ...
- 剑指Offer(三十一):整数中1出现的次数(从1到n整数中1出现的次数)
剑指Offer(三十一):整数中1出现的次数(从1到n整数中1出现的次数) 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https:// ...