제출 #587481

#제출 시각아이디문제언어결과실행 시간메모리
587481definitelynotmee통행료 (IOI18_highway)C++17
12 / 100
170 ms12672 KiB
#include "highway.h"
#include <bits/stdc++.h>
using namespace std;
#define ff first
#define ss second
#define all(x) x.begin(),x.end()
using ll = long long;
using pii = pair<int,int>;
using pll = pair<ll,ll>;
template<typename T>
using matrix = vector<vector<T>>;
const int INF = 1e9;

void find_pair(int N, std::vector<int> U, std::vector<int> V, int A, int B) {
    int M = U.size();
    ll base = ask(vector<int>(M));
    ll dist = base/A;

    vector<int> pai(N);
    matrix<int> g(N),eid(N);
    bool flag = 1;
    for(int i = 0; i < M; i++){
        g[U[i]].push_back(V[i]);
        g[V[i]].push_back(U[i]);
        eid[U[i]].push_back(i);
        eid[V[i]].push_back(i);
        flag&=U[i] == i && V[i] == i+1;
    }
    vector<int> s;
    vector<int> qry(M);
    int root = 0;
    auto dfs =[&](int id, int dist, auto dfs)->void{
        if(dist == 0){
            s.push_back(id);
            return;
        }
        for(int i = 0; i < g[id].size(); i++){
            if(eid[id][i] != pai[id]){
                pai[g[id][i]] = eid[id][i];
                dfs(g[id][i],dist-1,dfs);
            }
        }
    };

    if(flag){
        int ini = 0, fim = N-2;
        while(ini!=fim){
            int m = (ini+fim)>>1;
            for(int i = 0; i <= m; i++)
                qry[i] = 1;
            if(ask(qry) > base){
                fim = m;
            } else ini = m+1;
        }
        root = ini;
    }
    
    

    dfs(root,dist,dfs);

    while(s.size()> 1){
        vector<int> l, r;
        for(int i = 0; i < s.size(); i++){
            if(i&1)
                r.push_back(s[i]);
            else l.push_back(s[i]);
        }
        for(int i : l)
            qry[pai[i]] = 1;
        ll ret = ask(qry);
        if(ret > base)
            swap(s,l);
        else swap(s,r);
        fill(all(qry),0);
    }

    answer(0,s[0]);
}

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

highway.cpp: In function 'void find_pair(int, std::vector<int>, std::vector<int>, int, int)':
highway.cpp:64:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   64 |         for(int i = 0; i < s.size(); i++){
      |                        ~~^~~~~~~~~~
highway.cpp: In instantiation of 'find_pair(int, std::vector<int>, std::vector<int>, int, int)::<lambda(int, int, auto:23)> [with auto:23 = find_pair(int, std::vector<int>, std::vector<int>, int, int)::<lambda(int, int, auto:23)>]':
highway.cpp:60:22:   required from here
highway.cpp:37:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   37 |         for(int i = 0; i < g[id].size(); i++){
      |                        ~~^~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...