답안 #1060062

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1060062 2024-08-15T10:22:09 Z jerzyk 통행료 (IOI18_highway) C++17
90 / 100
194 ms 61788 KB
#include <bits/stdc++.h>
#include "highway.h"

using namespace std;
#define pb push_back
#define st first
#define nd second
typedef long long ll;
typedef long double ld;
const ll I = 1000LL * 1000LL * 1000LL * 1000LL * 1000LL * 1000LL;
const int II = 1000 * 1000 * 1000 * 2;
const ll M = 1000LL * 1000LL * 1000LL + 7LL;
const int N = 1000 * 1000 + 7;
ll bas, A, B;
vector<int>ed[N], num[N];
vector<int> cnd;
int dis[N];
vector<int> cur;

bool Question(int pos)
{
    for(int i = pos; i < (int)cur.size(); ++i)
    {
        int v = cur[i];
        for(int j = 0; j < (int)num[v].size(); ++j)
            cnd[num[v][j]] = 1;
    }
    ll ans = ask(cnd);
    for(int i = 0; i < (int)cnd.size(); ++i)
        cnd[i] = 0;
    return (ans > bas);
}

int BS()
{
    int p = 0, k = (int)cur.size(), s;
    while(p < k)
    {
        s = (p + k + 1) / 2;
        if(Question(s))
            p = s;
        else
            k = s - 1;
    }
    return cur[p];
}

void BFS(int s, int n)
{
    int v; queue<int> q;
    for(int i = 0; i <= n; ++i)
        dis[i] = II;
    dis[s] = 0;
    q.push(s);
    while(q.size() > 0)
    {
        v = q.front(); q.pop();
        for(int i = 0; i < (int)ed[v].size(); ++i)
        {
            if(dis[ed[v][i]] > dis[v] + 1)
            {
                dis[ed[v][i]] = dis[v] + 1;
                q.push(ed[v][i]);
            }
        }
    }
}

void DoCur1(int n)
{
    vector<pair<int, int>> hlp;
    for(int i = 0; i < n; ++i)
        hlp.pb(make_pair(dis[i], i));
    sort(hlp.begin(), hlp.end());
    cur.clear();
    for(int i = 0; i < n; ++i)
        cur.pb(hlp[i].nd);
    /*cerr << "cur1 \n";
    for(int i = 0; i < n; ++i)
        cout << cur[i] << " ";
    cout << "\n";*/
}

void DoCur2(int n, int il)
{
    cur.clear();
    for(int i = 0; i < n; ++i)
        if(dis[i] == il)
            cur.pb(i);
}

void find_pair(int N, vector<int> U, vector<int> V, int XA, int XB)
{
    A = XA; B = XB;
    int n = N;
    for(int i = 0; i < (int)U.size(); ++i)
    {
        ed[U[i]].pb(V[i]); ed[V[i]].pb(U[i]);
        num[U[i]].pb(i); num[V[i]].pb(i);
        cnd.pb(0);
    }
    bas = ask(cnd);
    for(int i = 0; i < n; ++i)
        cur.pb(i);
    int mid = BS(), s, t;
    //cerr << mid << "\n";
    BFS(mid, n);
    DoCur1(n);
    s = BS();
    //cerr << s << "\n";
    BFS(s, n);
    DoCur2(n, bas / A);
    t = BS();
    answer(s, t);
}
# 결과 실행 시간 메모리 Grader output
1 Correct 11 ms 48984 KB Output is correct
2 Correct 13 ms 48984 KB Output is correct
3 Correct 13 ms 48984 KB Output is correct
4 Correct 10 ms 49040 KB Output is correct
5 Correct 9 ms 48984 KB Output is correct
6 Correct 9 ms 48984 KB Output is correct
7 Correct 9 ms 48984 KB Output is correct
8 Correct 8 ms 48984 KB Output is correct
9 Correct 9 ms 49000 KB Output is correct
10 Correct 9 ms 48984 KB Output is correct
11 Correct 9 ms 48984 KB Output is correct
12 Correct 9 ms 48984 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 10 ms 48984 KB Output is correct
2 Correct 19 ms 50264 KB Output is correct
3 Correct 129 ms 58584 KB Output is correct
4 Correct 122 ms 58508 KB Output is correct
5 Correct 124 ms 58644 KB Output is correct
6 Correct 111 ms 58440 KB Output is correct
7 Correct 132 ms 58604 KB Output is correct
8 Correct 121 ms 58456 KB Output is correct
9 Correct 121 ms 58592 KB Output is correct
10 Correct 135 ms 58596 KB Output is correct
11 Correct 114 ms 58468 KB Output is correct
12 Correct 130 ms 58272 KB Output is correct
13 Correct 113 ms 58292 KB Output is correct
14 Correct 123 ms 58128 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 17 ms 50264 KB Output is correct
2 Correct 29 ms 51236 KB Output is correct
3 Correct 32 ms 52092 KB Output is correct
4 Correct 85 ms 58168 KB Output is correct
5 Correct 85 ms 58296 KB Output is correct
6 Correct 77 ms 58108 KB Output is correct
7 Correct 84 ms 58300 KB Output is correct
8 Correct 87 ms 58284 KB Output is correct
9 Correct 92 ms 58492 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 10 ms 48984 KB Output is correct
2 Correct 19 ms 50248 KB Output is correct
3 Correct 100 ms 56944 KB Output is correct
4 Correct 137 ms 58444 KB Output is correct
5 Correct 122 ms 58380 KB Output is correct
6 Correct 117 ms 58412 KB Output is correct
7 Correct 126 ms 58364 KB Output is correct
8 Correct 124 ms 58560 KB Output is correct
9 Correct 121 ms 58480 KB Output is correct
10 Correct 138 ms 58612 KB Output is correct
11 Correct 120 ms 58292 KB Output is correct
12 Correct 115 ms 58276 KB Output is correct
13 Correct 118 ms 58264 KB Output is correct
14 Correct 120 ms 58124 KB Output is correct
15 Correct 134 ms 58576 KB Output is correct
16 Correct 122 ms 58604 KB Output is correct
17 Correct 114 ms 58228 KB Output is correct
18 Correct 123 ms 58128 KB Output is correct
19 Correct 123 ms 58360 KB Output is correct
20 Correct 115 ms 58228 KB Output is correct
21 Correct 117 ms 58888 KB Output is correct
22 Correct 106 ms 58848 KB Output is correct
23 Correct 109 ms 59316 KB Output is correct
24 Correct 106 ms 59384 KB Output is correct
25 Correct 111 ms 58488 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 23 ms 50256 KB Output is correct
2 Correct 22 ms 50264 KB Output is correct
3 Correct 143 ms 58884 KB Output is correct
4 Correct 155 ms 59076 KB Output is correct
5 Correct 171 ms 61788 KB Output is correct
6 Correct 165 ms 61484 KB Output is correct
7 Correct 154 ms 61540 KB Output is correct
8 Correct 171 ms 61528 KB Output is correct
9 Correct 109 ms 55396 KB Output is correct
10 Correct 145 ms 56424 KB Output is correct
11 Correct 121 ms 56776 KB Output is correct
12 Correct 177 ms 58804 KB Output is correct
13 Correct 170 ms 61012 KB Output is correct
14 Correct 165 ms 61320 KB Output is correct
15 Correct 155 ms 61348 KB Output is correct
16 Correct 147 ms 57260 KB Output is correct
17 Correct 118 ms 60996 KB Output is correct
18 Correct 123 ms 61024 KB Output is correct
19 Correct 116 ms 61012 KB Output is correct
20 Correct 121 ms 61168 KB Output is correct
21 Correct 158 ms 61360 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 21 ms 50140 KB Output is correct
2 Correct 20 ms 50260 KB Output is correct
3 Correct 139 ms 60660 KB Output is correct
4 Correct 135 ms 60852 KB Output is correct
5 Correct 151 ms 60800 KB Output is correct
6 Correct 181 ms 61776 KB Output is correct
7 Correct 134 ms 60640 KB Output is correct
8 Correct 148 ms 60664 KB Output is correct
9 Correct 159 ms 60888 KB Output is correct
10 Correct 183 ms 61580 KB Output is correct
11 Correct 175 ms 61572 KB Output is correct
12 Correct 188 ms 61432 KB Output is correct
13 Correct 123 ms 56820 KB Output is correct
14 Correct 130 ms 56364 KB Output is correct
15 Correct 120 ms 56704 KB Output is correct
16 Correct 125 ms 56356 KB Output is correct
17 Correct 125 ms 56820 KB Output is correct
18 Correct 125 ms 56416 KB Output is correct
19 Correct 151 ms 60640 KB Output is correct
20 Correct 162 ms 60960 KB Output is correct
21 Correct 161 ms 61340 KB Output is correct
22 Correct 169 ms 61288 KB Output is correct
23 Correct 182 ms 61216 KB Output is correct
24 Correct 166 ms 61260 KB Output is correct
25 Correct 194 ms 61200 KB Output is correct
26 Correct 184 ms 61284 KB Output is correct
27 Correct 110 ms 61196 KB Output is correct
28 Partially correct 128 ms 60904 KB Output is partially correct
29 Partially correct 121 ms 61252 KB Output is partially correct
30 Correct 134 ms 60992 KB Output is correct
31 Partially correct 118 ms 60932 KB Output is partially correct
32 Partially correct 120 ms 60912 KB Output is partially correct
33 Partially correct 126 ms 61196 KB Output is partially correct
34 Partially correct 119 ms 61144 KB Output is partially correct
35 Partially correct 118 ms 61172 KB Output is partially correct
36 Partially correct 111 ms 60848 KB Output is partially correct
37 Partially correct 122 ms 61252 KB Output is partially correct
38 Correct 125 ms 61056 KB Output is correct
39 Correct 158 ms 61232 KB Output is correct
40 Correct 163 ms 61332 KB Output is correct
41 Correct 163 ms 61372 KB Output is correct
42 Correct 171 ms 61452 KB Output is correct