제출 #124094

#제출 시각아이디문제언어결과실행 시간메모리
124094MtaylorJakarta Skyscrapers (APIO15_skyscraper)C++17
컴파일 에러
0 ms0 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef vector<ll> vl ; #define mp make_pair #define pb push_back #define f first #define s second #define all(v) (v).begin(),(v).end() const int MOD = 1000000007; const int N = 1000005; const double PI =4*atan(1); const double eps = 1e-7; ll n,m; ll x,y; vl tab[N]; ll p[N]; ll b[N]; bool vis[N]; unordered_map<ll ,ll> maa; set <pair<ll,ll>> sss; ll ans=-1; void bfs(ll u){ queue<pair<ll,ll> > pq; for(auto t:tab[u]){ pq.push(mp(0,u*50000 + p[t])); } vis[u]=1; pair<ll,ll> ras; while(!pq.empty()){ ras=pq.top(); pq.front(); ll x=ras.s/50000; ll y=ras.s%50000; if(x==b[1]){ ans=-ras.f; return ; } //cout << x << " " << y << endl; ll z=maa[50000*(x+y)+y]; if(x+y <n && (z==0 || z!=0 && -ras.f+1<z)){ maa[50000*(x+y)+y]=-ras.f+1; if(x+y == b[1]){ ans=ras.f-1; return; } pq.push(mp(ras.f-1,50000*(x+y)+y)); } z=maa[50000*(x-y)+y]; if(x-y >=0 && (z==0 || z!=0 && -ras.f+1<z)){ maa[50000*(x-y)+y]=-ras.f+1; if(x-y == b[1]){ ans=ras.f-1; return; } pq.push(mp(ras.f-1,50000*(x-y)+y)); } //cout << x << endl; if(vis[x])continue; for(auto t: tab[x]){ z=maa[x*50000+p[t]]; if(z==0 || (z!=0 && -ras.f+1 <z)) pq.push(mp(ras.f,x*50000+p[t] )); maa[x*50000+p[t]]=-ras.f+1; } vis[x]=1; } } int main(){ ios::sync_with_stdio(0); //freopen("easy.txt","r",stdin); cin >> n >>m ; for(int i=0;i<m;i++){ cin >> x >> y; p[i]=y; b[i]=x; tab[x].pb(i); } //cout << b[0]<< endl; bfs(b[0]); cout << -ans; return 0; }

컴파일 시 표준 에러 (stderr) 메시지

skyscraper.cpp: In function 'void bfs(ll)':
skyscraper.cpp:37:16: error: 'class std::queue<std::pair<long long int, long long int> >' has no member named 'top'; did you mean 'pop'?
         ras=pq.top();
                ^~~
                pop
skyscraper.cpp:47:36: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
         if(x+y <n && (z==0 || z!=0 && -ras.f+1<z)){
                               ~~~~~^~~~~~~~~~~~~
skyscraper.cpp:56:37: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
         if(x-y >=0 && (z==0 || z!=0 && -ras.f+1<z)){
                                ~~~~~^~~~~~~~~~~~~