题目大意

POJ链接

给出\(n\)头牛的身高,和\(m\)对关系,表示牛\(a[i]\)与\(b[i]\)可以相互看见。已知最高的牛为第\(p\)头,身高为\(h\)。

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

(老姚的翻译好像改变量名了昂,但是无所谓)

输入格式

第一行四个整数\(n,p,h,m\),表示见题意,

接下来\(m\)行,每行两个正整数表示\(a[i],b[i]\)。

输出格式

\(n\)行整数表示每头牛的最大可能身高。

数据范围

\(1\le n\le 10000,1\le h\le 1000000,0\le m\le 10000\)

样例输入

9 3 5 5

1 3

5 3

4 3

3 7

9 8

样例输出

5

4

5

3

4

4

5

5

5

思路

既然\(a[i],b[i]\)之间可以相互看见,那么这两头牛之间的牛肯定都要比这两头牛要矮。把他们的身高都减去1即可。至于最后怎么算高度,就是相对于\(p\)的,用差分数组。

代码

#include <iostream>
#include <algorithm>
#include <map>
using namespace std;
const int maxn=10000+10;
int n,p,h,m;
map<pair<int,int>,int> vis;//和容易题那题一样依然可能有重复条件
int c[maxn],d[maxn]; int main(){
scanf("%d%d%d%d",&n,&p,&h,&m);
for(int i=1;i<=m;i++){
int a,b;
scanf("%d%d",&a,&b);
if(a>b)swap(a,b);//有的条件的顺序反了
if(vis[make_pair(a,b)])continue;
vis[make_pair(a,b)]=1;
d[a+1]--;d[b]++;
} for(int i=1;i<=n;i++){
c[i]=c[i-1]+d[i];
printf("%d\n",h+c[i]);
}
return 0;
}

最新文章

  1. 播放wav聲音格式
  2. Android SeekBar的OnSeekBarChangeListener
  3. JEE学习线路
  4. 学习微软中间语言(MSIL)的绝佳工具 Dotnet IL Editor 推荐
  5. Jetty 8长连接上的又一个坑
  6. 2014:超越炒作,进入部署SDN的时代
  7. mysql中varchar最长多少
  8. 2014联合三所学校 (HDU 4888 HDU 4891 HDU 4893)
  9. 加载window事件
  10. 尝试回答js问题
  11. WebStorm配置Vue开发环境
  12. [CVPR2015] Is object localization for free? – Weakly-supervised learning with convolutional neural networks论文笔记
  13. 前端入门8-JavaScript语法之数据类型和变量
  14. Java 构造器Constructor 继承
  15. docker安装testlink
  16. 【死磕 Spring】—— IoC 之深入理解 Spring IoC
  17. 每天一个linux命令:df 命令
  18. 3. Decision Tree
  19. 域名与IP对应,解决只能IP访问不能域名访问的问题
  20. IOS-网络(JSON解析数据与XML解析数据)

热门文章

  1. java中数据类型占多少字节
  2. 借助FreeHttp任意篡改Websocket报文(Websocket改包)
  3. python操作从数据库中获取数据的接口
  4. oracle之创建和管理数据库用户账户
  5. DASH流媒体MPD中的segmentTemplate
  6. Sqlmap爆库命令的简单使用
  7. 虚拟机栈(Java Stack)基础知识
  8. 极简 Node.js 入门 - 4.2 初识 stream
  9. VMware虚拟机ubuntu下安装VMware Tools步骤
  10. 大白话谈JVM的类加载机制