Submission #1280095

#TimeUsernameProblemLanguageResultExecution timeMemory
1280095Salazar봉쇄 시간 (IOI23_closing)C++20
Compilation error
0 ms0 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long

vector<pair<int,int>> G[201000];
int Vis[201000] /*0 - N, 1 - X, 2 - Y, 3 - X e Y*/, Vxy[10] /*1 - X 2 - Y*/, Pes[201000];
priority_queue<pair<int,pair<int,pair<int,int>>>> Q; // valor, atual, pai, base X=1 Y=2

int32_t max_score(int32_t N, int32_t X, int32_t Y, int K, int32_t U[], int32_t V[], int32_t W[]) {
    for (int i = 0; i < N-1; i++) {
        G[U[i]].push_back(make_pair(V[i],W[i]));
        G[V[i]].push_back(make_pair(U[i],W[i]));
        Vis[i] = 0;
        Pes[i] = 0;
    }
    Pes[N-1] = 0;
    Vis[N-1] = 0;
    Q.push(make_pair(0, make_pair(X,make_pair(X,1))));
    Q.push(make_pair(0, make_pair(Y,make_pair(Y,2))));
    int S = 0;
    int R = 0;
    while (Q.empty() == false and S<K) {
        pair<int,pair<int,pair<int,int>>> Atual = Q.top();
        Q.pop()
        if (Vis[Atual.second.first]&Atual.second.second.second) continue;
        if (S+Atual.first > K) break;
        if (Atual.second.first == X and Atual.second.second.second==2) Vxy[1] = Atual.first;
        if (Atual.second.first == Y and Atual.second.second.second==1) Vxy[2] = Atual.first;
        S += Atual.first;
        R++;
        Pes[Atual.second.first] = Atual.first;
        int Lp = 0;
        for (int i = 0; i < G[Atual.second.first].size(); i++) {
            if (G[Atual.second.first][i].first == Atual.second.second.first) Lp = G[Atual.second.first][i].second
            if (Vis[Atual.second.first] == 0) {
                if (Vis[G[Atual.second.first][i].first] == 0) Q.push(make_pair(Atual.first+G[Atual.second.first][i].second,make_pair(G[Atual.second.first][i].first,make_pair(Atual.second.first,Atual.second.second.second))));
                else if (Vis[G[Atual.second.first][i].first]&Atual.second.second.second == 0) {
                    Q.push(make_pair(((Atual.first+G[Atual.second.first][i].second>Pes[G[Atual.second.first][i].first])?Atual.first+G[Atual.second.first][i].second-Pes[G[Atual.second.first][i].first]:0),make_pair(G[Atual.second.first][i].first,make_pair(Atual.second.first,Atual.second.second.second))));
                }
            } else {
                if (Vis[G[Atual.second.first][i].first]&Atual.second.second.second == 0) {
                    Q.push(make_pair(((Atual.first+G[Atual.second.first][i].second>Pes[G[Atual.second.first][i].first])?Atual.first+G[Atual.second.first][i].second-Pes[G[Atual.second.first][i].first]:0),make_pair(G[Atual.second.first][i].first,make_pair(Atual.second.first,Atual.second.second.second))));
                }
            }
        }
        if (Vis[Atual.second.first] == 0 && Vis[Atual.second.second.first] != Atual.second.second.second) Q.push((Lp+Pes[Atual.second.second.first]>Atual.first)?Lp+Pes[Atual.second.second.first]-Atual.first:0,make_pair(Atual.second.first,make_pair(Atual.second.second.first,3-Atual.second.second.second)));
        Vis[Atual.second.first] += Atual.second.second.second;
    }
    
    return R;
}

Compilation message (stderr)

closing.cpp: In function 'int32_t max_score(int32_t, int32_t, int32_t, long long int, int32_t*, int32_t*, int32_t*)':
closing.cpp:24:16: error: expected ';' before 'if'
   24 |         Q.pop()
      |                ^
      |                ;
   25 |         if (Vis[Atual.second.first]&Atual.second.second.second) continue;
      |         ~~      
closing.cpp:34:114: error: expected ';' before 'if'
   34 |             if (G[Atual.second.first][i].first == Atual.second.second.first) Lp = G[Atual.second.first][i].second
      |                                                                                                                  ^
      |                                                                                                                  ;
   35 |             if (Vis[Atual.second.first] == 0) {
      |             ~~                                                                                                    
closing.cpp:46:113: error: no matching function for call to 'std::priority_queue<std::pair<long long int, std::pair<long long int, std::pair<long long int, long long int> > > >::push(long long int, std::pair<long long int, std::pair<long long int, long long int> >)'
   46 |         if (Vis[Atual.second.first] == 0 && Vis[Atual.second.second.first] != Atual.second.second.second) Q.push((Lp+Pes[Atual.second.second.first]>Atual.first)?Lp+Pes[Atual.second.second.first]-Atual.first:0,make_pair(Atual.second.first,make_pair(Atual.second.second.first,3-Atual.second.second.second)));
      |                                                                                                           ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/13/queue:66,
                 from /usr/include/x86_64-linux-gnu/c++/13/bits/stdc++.h:157,
                 from closing.cpp:1:
/usr/include/c++/13/bits/stl_queue.h:738:7: note: candidate: 'void std::priority_queue<_Tp, _Sequence, _Compare>::push(const value_type&) [with _Tp = std::pair<long long int, std::pair<long long int, std::pair<long long int, long long int> > >; _Sequence = std::vector<std::pair<long long int, std::pair<long long int, std::pair<long long int, long long int> > >, std::allocator<std::pair<long long int, std::pair<long long int, std::pair<long long int, long long int> > > > >; _Compare = std::less<std::pair<long long int, std::pair<long long int, std::pair<long long int, long long int> > > >; value_type = std::pair<long long int, std::pair<long long int, std::pair<long long int, long long int> > >]'
  738 |       push(const value_type& __x)
      |       ^~~~
/usr/include/c++/13/bits/stl_queue.h:738:7: note:   candidate expects 1 argument, 2 provided
/usr/include/c++/13/bits/stl_queue.h:746:7: note: candidate: 'void std::priority_queue<_Tp, _Sequence, _Compare>::push(value_type&&) [with _Tp = std::pair<long long int, std::pair<long long int, std::pair<long long int, long long int> > >; _Sequence = std::vector<std::pair<long long int, std::pair<long long int, std::pair<long long int, long long int> > >, std::allocator<std::pair<long long int, std::pair<long long int, std::pair<long long int, long long int> > > > >; _Compare = std::less<std::pair<long long int, std::pair<long long int, std::pair<long long int, long long int> > > >; value_type = std::pair<long long int, std::pair<long long int, std::pair<long long int, long long int> > >]'
  746 |       push(value_type&& __x)
      |       ^~~~
/usr/include/c++/13/bits/stl_queue.h:746:7: note:   candidate expects 1 argument, 2 provided