Submission #1039693

# Submission time Handle Problem Language Result Execution time Memory
1039693 2024-07-31T07:44:32 Z vjudge1 Highway Tolls (IOI18_highway) C++17
51 / 100
107 ms 13508 KB
#include "highway.h"
#include<bits/stdc++.h>
#define K 1<<17
using namespace std;
int pos[2][K],par[2][K],pari[2][K],dis[2][K];
vector<pair<int,int>>adj[K];
void bfs(int n,int i){
    queue<int>q;
    int CC=0;
    memset(dis[i],-1,sizeof *pos);
    q.push(n);
    dis[i][n]=0;
    par[i][n]=-1;
    while(q.size()){
        int x=q.front(),d=dis[i][x];
        q.pop(); pos[i][x]=++CC;
        for(auto [j,k]:adj[x]) if(dis[i][j]<0)
            par[i][j]=x,pari[i][j]=k,
            dis[i][j]=d+1,q.push(j);
    }
}
int indd,dep2=-1,actD;
int whicho(int pivot,int N,int ind,int M,vector<int>v,long long D,int spec){
    if(dep2>=0){
        vector<int>v2;
        for(auto i:v)
            if(dis[ind][i]==dep2)
                v2.push_back(i);
        v=v2;
    }
    indd=ind;
    sort(v.begin(),v.end(),[](int a,int b){
        return pos[indd][a]<pos[indd][b];
    });
    int l=1,r=v.size()-1,res=1;
    while(l<=r){
        int mid=l+r>>1;
        vector<int>V(M,1);
        V[spec]=0;
        for(int i=mid;i<v.size();i++) {
            if(par[ind][v[i]]!=pivot)
                if(!V[pari[ind][par[ind][v[i]]]])
                    continue;
            V[pari[ind][v[i]]]=0;
        }
        if(ask(V)<D)
            l=res=mid+1;
        else r=mid-1;
    }
    int ans=v[res-1];
    dep2=actD-dis[ind][ans]-1;
    return ans;
}
void find_pair(int N, std::vector<int> U, std::vector<int> V, int A, int B) {
    int M=U.size();
    for(int i=0;i<M;i++)
        adj[U[i]].push_back({V[i],i}),
        adj[V[i]].push_back({U[i],i});
    long long D=ask(vector<int>(M,0))/A;
    int res=M-1,l=1,r=M-1;
    actD=D;
    while(l<=r){
        int mid=l+r>>1;
        vector<int>v(M);
        for(int i=0;i<mid;i++)
            v[i]=1;
        if(ask(v)>D*A)
            res=r=mid-1;
        else l=mid+1;
    }
    int a=U[res],b=V[res];
    bfs(a,0);
    bfs(b,1);
    vector<int>sta,stb;
    for(int i=0;i<N;i++)
        if(dis[0][i]<dis[1][i])
            sta.push_back(i);
        else if(dis[0][i]-dis[1][i])
            stb.push_back(i);
    answer(whicho(a,N,0,M,sta,D*B-B+A,res),
            whicho(b,N,1,M,stb,D*B-B+A,res));
}

Compilation message

highway.cpp: In function 'int whicho(int, int, int, int, std::vector<int>, long long int, int)':
highway.cpp:37:18: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   37 |         int mid=l+r>>1;
      |                 ~^~
highway.cpp:40:24: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   40 |         for(int i=mid;i<v.size();i++) {
      |                       ~^~~~~~~~~
highway.cpp: In function 'void find_pair(int, std::vector<int>, std::vector<int>, int, int)':
highway.cpp:63:18: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   63 |         int mid=l+r>>1;
      |                 ~^~
# Verdict Execution time Memory Grader output
1 Correct 2 ms 4440 KB Output is correct
2 Correct 2 ms 4440 KB Output is correct
3 Correct 2 ms 4440 KB Output is correct
4 Correct 2 ms 4440 KB Output is correct
5 Correct 2 ms 4560 KB Output is correct
6 Correct 2 ms 4440 KB Output is correct
7 Correct 1 ms 4440 KB Output is correct
8 Correct 1 ms 4440 KB Output is correct
9 Correct 3 ms 4440 KB Output is correct
10 Correct 2 ms 4440 KB Output is correct
11 Correct 1 ms 4440 KB Output is correct
12 Correct 2 ms 4440 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 4440 KB Output is correct
2 Correct 9 ms 5464 KB Output is correct
3 Correct 85 ms 12540 KB Output is correct
4 Correct 86 ms 12544 KB Output is correct
5 Correct 94 ms 12836 KB Output is correct
6 Correct 83 ms 12556 KB Output is correct
7 Correct 107 ms 12556 KB Output is correct
8 Correct 95 ms 12536 KB Output is correct
9 Correct 85 ms 12564 KB Output is correct
10 Correct 87 ms 12556 KB Output is correct
11 Correct 78 ms 11964 KB Output is correct
12 Correct 77 ms 11976 KB Output is correct
13 Correct 85 ms 11968 KB Output is correct
14 Correct 75 ms 11784 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 8 ms 5208 KB Output is correct
2 Correct 15 ms 6232 KB Output is correct
3 Correct 22 ms 7020 KB Output is correct
4 Correct 68 ms 11876 KB Output is correct
5 Correct 84 ms 11880 KB Output is correct
6 Correct 66 ms 12076 KB Output is correct
7 Correct 64 ms 11968 KB Output is correct
8 Correct 70 ms 12152 KB Output is correct
9 Correct 66 ms 11796 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 4440 KB Output is correct
2 Correct 10 ms 5464 KB Output is correct
3 Correct 69 ms 11712 KB Output is correct
4 Correct 94 ms 12548 KB Output is correct
5 Correct 70 ms 12404 KB Output is correct
6 Correct 103 ms 12516 KB Output is correct
7 Correct 66 ms 12292 KB Output is correct
8 Correct 70 ms 12532 KB Output is correct
9 Correct 79 ms 12536 KB Output is correct
10 Correct 81 ms 12548 KB Output is correct
11 Correct 77 ms 12124 KB Output is correct
12 Correct 83 ms 11996 KB Output is correct
13 Correct 79 ms 11960 KB Output is correct
14 Correct 80 ms 11836 KB Output is correct
15 Correct 93 ms 12560 KB Output is correct
16 Correct 99 ms 12552 KB Output is correct
17 Correct 73 ms 11996 KB Output is correct
18 Correct 86 ms 11788 KB Output is correct
19 Correct 69 ms 12536 KB Output is correct
20 Correct 84 ms 11964 KB Output is correct
21 Correct 74 ms 13284 KB Output is correct
22 Correct 78 ms 13280 KB Output is correct
23 Correct 85 ms 13000 KB Output is correct
24 Correct 80 ms 12800 KB Output is correct
25 Correct 87 ms 12348 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 11 ms 5464 KB Output is correct
2 Correct 12 ms 5572 KB Output is correct
3 Correct 97 ms 12876 KB Output is correct
4 Incorrect 97 ms 13508 KB Output is incorrect: {s, t} is wrong.
5 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 9 ms 5464 KB Output is incorrect: {s, t} is wrong.
2 Halted 0 ms 0 KB -