博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AcWing 101. 最高的牛 (差分) 打卡
阅读量:5315 次
发布时间:2019-06-14

本文共 1209 字,大约阅读时间需要 4 分钟。

有 NN 头牛站成一行,被编队为1、2、3…N,每头牛的身高都为整数。

当且仅当两头牛中间的牛身高都比它们矮时,两头牛方可看到对方。

现在,我们只知道其中最高的牛是第 PP 头,它的身高是 HH ,剩余牛的身高未知。

但是,我们还知道这群牛之中存在着 MM 对关系,每对关系都指明了某两头牛 AA 和 BB 可以相互看见。

求每头牛的身高的最大可能值是多少。

输入格式

第一行输入整数N,P,H,MN,P,H,M,数据用空格隔开。

接下来M行,每行输出两个整数 AA 和 BB ,代表牛 AA 和牛 BB 可以相互看见,数据用空格隔开。

输出格式

一共输出 NN 行数据,每行输出一个整数。

第 ii 行输出的整数代表第 ii 头牛可能的最大身高。

数据范围

1N100001≤N≤10000,

1H10000001≤H≤1000000,
1A,B100001≤A,B≤10000,
0M100000≤M≤10000

输入样例:

9 3 5 51 35 34 33 79 8

输出样例:

545344555
注意:
  • 此题中给出的关系对可能存在重复

 

 

题意:让牛的身高尽可能大

思路:首先我们肯定是由最高的那头牛来推出其他牛,身高为了保证尽可能高,所以我们让身高每次减一,每对关系其实说明一个事情,那对关系中间的牛都要比这两个牛矮

思路一:

我们可以把所有牛初始身高设为h,然后每给一对关系我们都区间-1,最后得出答案

思路二

我们差分算区间-1,然后最后把差值加上h就是答案

 

#include
#define maxn 100005#define mod 1000000007using namespace std;typedef long long ll; struct sss{ int x,y; }a[maxn];ll n,p,h,m,num,d[maxn]; map
mp[10005];ll c[maxn];int main(){ cin>>n>>p>>h>>m; ll x,y; for(int i=0;i
>x>>y; if(mp[x][y]||mp[y][x]) continue; if(x>y){ int t=x; x=y; y=t; } a[num].x=x; a[num++].y=y; mp[x][y]=1; mp[y][x]=1; } for(int i=0;i

 

转载于:https://www.cnblogs.com/Lis-/p/10887050.html

你可能感兴趣的文章
Windows Phone 7你不知道的8件事
查看>>
实用拜占庭容错算法PBFT
查看>>
java的二叉树树一层层输出,Java构造二叉树、树形结构先序遍历、中序遍历、后序遍历...
查看>>
php仿阿里巴巴,php实现的仿阿里巴巴实现同类产品翻页
查看>>
Node 中异常收集与监控
查看>>
Excel-基本操作
查看>>
面对问题,如何去分析?(分析套路)
查看>>
Excel-逻辑函数
查看>>
面对问题,如何去分析?(日报问题)
查看>>
数据分析-业务知识
查看>>
nodejs vs python
查看>>
poj-1410 Intersection
查看>>
Java多线程基础(一)
查看>>
TCP粘包拆包问题
查看>>
Java中Runnable和Thread的区别
查看>>
SQL Server中利用正则表达式替换字符串
查看>>
POJ 1015 Jury Compromise(双塔dp)
查看>>
论三星输入法的好坏
查看>>
Linux 终端连接工具 XShell v6.0.01 企业便携版
查看>>
JS写一个简单日历
查看>>