Submission #1177229

#TimeUsernameProblemLanguageResultExecution timeMemory
1177229simona1230Airline Route Map (JOI18_airline)C++17
100 / 100
169 ms27112 KiB
#include "Alicelib.h"
#include <bits/stdc++.h>
using namespace std;

vector<pair<int,int> > ansa;
void Make(int i,int x,int y)
{
    ansa.push_back({x,y});
}

void Alice( int N, int M, int A[], int B[] )
{
    int cnte=0;

    for(int i=0;i<M;i++)
        Make(cnte++,A[i]+1,B[i]+1);

    for(int i=0;i<9;i++)
        Make(cnte++,N+i+1,N+i+2);

    for(int i=1;i<=N;i++)
        Make(cnte++,i,N+11);
    Make(cnte++,N+11,0);

    for(int i=1;i<=N;i++)
        for(int j=0;j<10;j++)
            if(i&(1<<j))Make(cnte++,i,j+N+1);

    InitG(N+12,ansa.size());
    for(int i=0;i<ansa.size();i++)
        MakeG(i,ansa[i].first,ansa[i].second);
}

#include "Boblib.h"
#include <bits/stdc++.h>
using namespace std;

int pw[100000],bt[100000];
vector<int> v[100000];
int done[100000],num[100000];
void Bob( int V, int U, int C[], int D[] )
{
    for(int i=0; i<U; i++)
    {
        v[C[i]].push_back(D[i]);
        v[D[i]].push_back(C[i]);
        //cout<<C[i]<<" "<<D[i]<<endl;
    }

    int ed=0;
    for(int i=0; i<V; i++)
        if(v[i].size()==1&&v[v[i][0]].size()==V-11)ed=i;

    ed=v[ed][0];
    bt[ed]=-1;

    for(int i=0;i<v[ed].size();i++)
        bt[v[ed][i]]=-1;

    int f=-1,l=-1;
    for(int i=0;i<V;i++)
    {
        if(bt[i]==-1)continue;
        int in=0;
        for(int j=0;j<v[i].size();j++)
            if(bt[v[i][j]]==0)in++;

        if(in==1)
        {
            if(f!=-1)l=i;
            else f=i;
        }
    }
    if(v[f].size()<v[l].size())swap(f,l);
    int c=0;
    while(1)
    {
        bt[f]=(1<<c);
        //cout<<f<<" > "<<(1<<c)<<endl;
        int h=0;
        for(int i=0;i<v[f].size();i++)
        {
            int nb=v[f][i];
            //cout<<nb<<" , ";
            if(!h&&bt[nb]==0)f=nb,h=1;
        }
        //cout<<endl;
        c++;
        if(h==0)break;
    }

    for(int i=0;i<V;i++)
    {
        if(bt[i]!=-1)continue;
        for(int j=0;j<v[i].size();j++)
        {
            int nb=v[i][j];
            if(bt[nb]!=-1)num[i]+=bt[nb];
        }
        //cout<<i<<" ! "<<num[i]<<endl;
    }

    vector<pair<int,int> > ansb;
    for(int i=0;i<U;i++)
    {
        if(num[C[i]]&&num[D[i]])
        {
            ansb.push_back({num[C[i]]-1,num[D[i]]-1});
        }
    }
    InitMap(V-c-2,ansb.size());

    for(int i=0;i<ansb.size();i++)
        MakeMap(ansb[i].first,ansb[i].second);
}

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...