正题
大意
有n头牛,两头牛可以相互看见仅当他们中间没有比他们高的牛,现在已经知道最高的牛是第p头,高度为h。还知道m对关系表示两头牛之间可以相互看见,求每头牛最高高度。
解题思路
我们先无视最高的一头牛,我们假设已经知道了两头可以相互看见的牛的高度,现在他们之间的牛都比他们矮,既然求最高高度,那么他们之间的牛最高的高度就是这两头牛最低的高度减一。之后我们开始时所有的牛的最高高度都是最高的那头牛的高度就行了。
代码
#include<cstdio>
#include<algorithm>
#include<map>
using namespace std;
map<pair<int,int>,bool> ojbk;
int n,p,H,m,a,b,s,h[10001];
int main()
{scanf("%d%d%d%d",&n,&p,&H,&m);for(int i=1;i<=m;i++){scanf("%d%d",&a,&b);if (ojbk[make_pair(a,b)]) continue;ojbk[make_pair(a,b)]=true;//判重if (a>b)swap(a,b);h[a+1]--;h[b]++;//计算}s=0;for(int i=1;i<=n;i++){s=s+h[i];printf("%d\n",H+s);//输出}
}