제출 #594323

#제출 시각아이디문제언어결과실행 시간메모리
594323TimDeeHighway Tolls (IOI18_highway)C++14
12 / 100
132 ms8804 KiB
#include "highway.h"
#include <bits/stdc++.h>
using namespace std;
void find_pair(int n, vector<int>u, vector<int> v, int a, int b) {
    int m=u.size();
    vector<int> paiu(m,1);
    int dist=ask(paiu)/b;
    vector<vector<pair<int,int>>> adj(n);
    for (int i=0; i<m; ++i) {
        adj[u[i]].push_back({v[i],i});
        adj[v[i]].push_back({u[i],i});
    }
    queue<int> q;
    q.push(0);
    vector<int> d(n,0);
    vector<int> D;
    vector<int> vis(n,0); vis[0]=1;
    while (!q.empty()) {
        int u=q.front(); q.pop();
        for (auto it:adj[u]) {
            int v=it.first;
            if (!vis[v]) {
                d[v]=d[u]+1;
                q.push(v);
                vis[v]=1;
            }
        }
    }
    for (int i=0; i<n; ++i) {
        if (d[i]==dist) D.push_back(i);
    }
    int l=0, r=D.size()-1;
    vector<int> scuza(m,1);
    while (l<r) {
        int mid=(l+r+1)/2;
        paiu=scuza;
        for (int i=l; i<mid; ++i) {
            for (auto it:adj[D[i]]) {
                paiu[it.second]=0;
            }
        }
        int x=ask(paiu);
        if (x<dist*b) r=mid-1;
        else l=mid;
    }
    answer(0,D[r]);
}
#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...