제출 #406063

#제출 시각아이디문제언어결과실행 시간메모리
406063urd05통행료 (IOI18_highway)C++14
51 / 100
200 ms15136 KiB
#include "highway.h"
#include <bits/stdc++.h>
using namespace std;

int ind[100000];
int pos[100000];
typedef pair<int,int> P;
vector<P> adj[90000];
int cnt=1;

void dfs(int v,int prev) {
    for(int i=0;i<adj[v].size();i++) {
        int nt=adj[v][i].first;
        if (nt==prev)
            continue;
        pos[adj[v][i].second]=nt;
        ind[cnt++]=adj[v][i].second;
        dfs(nt,v);
    }
}

void find_pair(int n,vector<int> u,vector<int> v,int a,int b) {
    int m=u.size();
    for(int i=0;i<u.size();i++) {
      adj[u[i]].push_back(P(v[i],i));
      adj[v[i]].push_back(P(u[i],i));
    }
    dfs(0,-1);
    vector<int> vec(m);
    int l=ask(vec)/a;
    int lo=0; //impossible
    int hi=n-1; //possible
    while (lo+1<hi) {
        int mid=(lo+hi)/2;
        for(int i=0;i<m;i++) {
            vec[i]=0;
        }
        for(int i=1;i<=mid;i++) {
            vec[ind[i]]=1;
        }
        if (ask(vec)==1LL*l*b) {
            hi=mid;
        }
        else {
            lo=mid;
        }
    }
    int v1=pos[ind[hi]];
    cnt=1;
    dfs(v1,-1);
    for(int i=0;i<m;i++) {
        vec[i]=0;
    }
    lo=0; //impossible
    hi=n-1; //possible
    while (lo+1<hi) {
        int mid=(lo+hi)/2;
        for(int i=0;i<m;i++) {
            vec[i]=0;
        }
        for(int i=1;i<=mid;i++) {
            vec[ind[i]]=1;
        }
        if (ask(vec)==1LL*l*b) {
            hi=mid;
        }
        else {
            lo=mid;
        }
    }
    int v2=pos[ind[hi]];
    answer(v1,v2);
}

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

highway.cpp: In function 'void dfs(int, int)':
highway.cpp:12:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   12 |     for(int i=0;i<adj[v].size();i++) {
      |                 ~^~~~~~~~~~~~~~
highway.cpp: In function 'void find_pair(int, std::vector<int>, std::vector<int>, int, int)':
highway.cpp:24:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   24 |     for(int i=0;i<u.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...