Submission #166309

#TimeUsernameProblemLanguageResultExecution timeMemory
166309georgerapeanuAirline Route Map (JOI18_airline)C++11
37 / 100
1024 ms30664 KiB
#include "Alicelib.h"
#include <cassert>
#include <cstdio>
#pragma once
#include <algorithm>
#include <vector>

using namespace std;

const int NMAX = 1e3;
const int LGMAX = 10;

void Alice( int n, int m, int a[], int b[] ){
    vector<pair<int,int> > edges;
    for(int i = 0;i < m;i++){
        edges.push_back({a[i] + 1,b[i] + 1});
    }

    for(int h = 0;h < LGMAX;h++){
        for(int i = 1;i <= n;i++){
            if((i >> h) & 1){
                edges.push_back({i,n + 1 + h});
            }
        }
    }

    int lst = n + LGMAX;
    for(int i = n + 1;i <= n + LGMAX;i++){
        for(int j = i + 1;j <= lst;j++){
            edges.push_back({i,j});
        }
        lst--;
    }

    for(int i = n + 1;i <= n + LGMAX;i++){
        edges.push_back({n + LGMAX + 1,i});
    }

    edges.push_back({n + LGMAX + 2,n + LGMAX + 1});

    InitG(n + LGMAX + 2,edges.size());

    for(int i = 0;i < (int)edges.size();i++){
        MakeG(i,edges[i].first - 1,edges[i].second - 1);
    }
}

#include "Boblib.h"
#include <cassert>
#include <cstdio>
#pragma once
#include <vector>
#include <algorithm>

using namespace std;

const int NMAX = 1e3;
const int LGMAX = 10;

static int gr[NMAX + LGMAX + 5];
static vector<int> graph[NMAX + LGMAX + 5];
int exp_gr[LGMAX + 2];
int tag[NMAX + LGMAX + 5];

void Bob( int n, int m, int a[], int b[] ){
	for(int i = 0;i < m;i++){
        gr[a[i] + 1]++;
        gr[b[i] + 1]++; 
        graph[a[i] + 1].push_back(b[i] + 1);
        graph[b[i] + 1].push_back(a[i] + 1);
    }

    for(int h = 0;h < LGMAX;h++){
        exp_gr[h]++;
        for(int i = 1;i <= n - LGMAX - 2;i++){
            if((i >> h) & 1){
                exp_gr[h]++;
            }
        }
    }

    int lst = LGMAX - 1;

    for(int h = 0;h < LGMAX;h++){
        for(int i = h;i <= lst;i++){
            exp_gr[h]++;
            exp_gr[i]++;
        }
        lst--;
    }
    
    sort(exp_gr,exp_gr + LGMAX);
    reverse(exp_gr,exp_gr + LGMAX);


    int master_node = -1;
    int control_node = -1;

    for(int i = 1;i <= n;i++){
        if(gr[i] == 1){
            int node = graph[i][0];
            if(gr[node] != LGMAX + 1){
                continue;
            }

            for(int i = 0;i < (int)graph[node].size();i++){
                if(graph[node][i] == node){
                    swap(graph[node][i],graph[node].back());
                    break;
                }
            }

            sort(graph[node].begin(),graph[node].begin() + LGMAX,[&](int a,int b){return gr[a] > gr[b];});
            
            for(int i = 0;i < LGMAX;i++){
                if(exp_gr[i] != gr[graph[node][i]]){
                    continue;
                }
            }
            control_node = i;
            master_node = node;
            break;
        }
    }

    assert(master_node != -1 && control_node != -1);

    for(int i = 0;i < (int)graph[master_node].size();i++){
        if(graph[master_node][i] == control_node){
            swap(graph[master_node][i],graph[master_node].back());
            break;
        }
    }

    sort(graph[master_node].begin(),graph[master_node].begin() + LGMAX,[&](int a,int b){return gr[a] > gr[b];});
            
    tag[master_node] = -1;
    tag[control_node] = -1;

    for(int i = 0;i < LGMAX;i++){
        tag[graph[master_node][i]] = -1;
    }

    for(int i = 0;i < LGMAX;i++){
        for(auto it:graph[graph[master_node][i]]){
            if(tag[it] != -1){
                tag[it] |= (1 << i);
            }
        }
    }

    vector<pair<int,int> > edges;

    for(int i = 0;i < m;i++){
        if(tag[a[i] + 1] != -1 && tag[b[i] + 1] != -1){
            edges.push_back({tag[a[i] + 1],tag[b[i] + 1]});
        }
    }

    InitMap(n - LGMAX - 2,edges.size());

    for(auto it:edges){
        MakeMap(it.first - 1,it.second - 1);
    }
}

Compilation message (stderr)

Alice.cpp:4:9: warning: #pragma once in main file
 #pragma once
         ^~~~

Bob.cpp:4:9: warning: #pragma once in main file
 #pragma once
         ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...