AtCoder Beginner Contest 166 C.Peaks

AtCoder Beginner Contest 166 C.Peaks

题目链接
AtCoder Beginner Contest 166 C.Peaks_第1张图片
这题考虑存图的话一定会超时,所以要在输入时就判断,也很简单,可以直接在输入时判断矮的那个人非法,最后跑一遍更新答案即可,复杂度 O ( m + n ) O(m+n) O(m+n),AC代码如下:

#include
using namespace std;
typedef long long ll;

main()
{
    int n,m,x,y;
    cin>>n>>m;
    int h[n+1],flag[n+1],ans=0;
    fill(flag,flag+n+1,1);
    for(int i=1;i<=n;i++) cin>>h[i];
    while(m--){
        cin>>x>>y;
        if(h[x]<=h[y]) flag[x]=0;
        if(h[y]<=h[x]) flag[y]=0;
    }
    for(int i=1;i<=n;i++)
        if(flag[i]) ans++;
    cout<<ans;
    return 0;
}

你可能感兴趣的:(AtCoder,思维)