Submission #1280151

#TimeUsernameProblemLanguageResultExecution timeMemory
1280151enzyAirline Route Map (JOI18_airline)C++20
91 / 100
192 ms30280 KiB
#include "Alicelib.h"
#include<bits/stdc++.h>
using namespace std;
vector<pair<int,int>>arestas;
void Alice( int n, int m, int A[], int B[] ){
	int sb=0, cnt=0;
	for(int i=0;i<n;i++)
	    for(int k=0;k<10;k++) if(i&(1<<k)) sb++;
	InitG(n+13,m+n+11+sb+9+9);
	for(int i=0;i<m;i++) MakeG(cnt++,A[i],B[i]);
	for(int i=0;i<=n+10;i++) if(i!=n) MakeG(cnt++,n,i);
	//for(int i=n+1;i<=n+10;i++) MakeG(cnt++,n+11,i);
	MakeG(cnt++,n+11,n+1);
	for(int i=0;i<n;i++)
	    for(int k=0;k<10;k++) if(i&(1<<k)) MakeG(cnt++,i,n+k+1);
    for(int i=n+2;i<=n+10;i++){
        MakeG(cnt++,i-1,i);
        MakeG(cnt++,n+12,i);
    }
}
#include "Boblib.h"
#include<bits/stdc++.h>
using namespace std;
const int maxn=1020;
vector<int>v[maxn];
int val[maxn], marc[maxn], freq[maxn];
int arestas[maxn][maxn];
void Bob( int N, int M, int C[], int D[] ){
	for(int i=0;i<M;i++){
	    arestas[C[i]][D[i]]=arestas[D[i]][C[i]]=1;
	    v[C[i]].push_back(D[i]);
	    v[D[i]].push_back(C[i]);
	}
	int n=N-13;
	int sb=0;
	for(int i=0;i<n;i++)
	    for(int k=0;k<10;k++) if(i&(1<<k)) sb++;
    int m=M-n-11-sb-9-9;
    InitMap(n,m);
    int pai;
    for(int i=0;i<N;i++){
        sort(v[i].begin(),v[i].end());
        //cout << i << " " << v[i].size() << ": ";
        //for(int x : v[i]) cout << x << " ";
        //cout << endl;
        if(v[i].size()==N-3) pai=i;
    }
    //cout << endl;
    //cout << "! " << pai << endl;
    v[pai].push_back(maxn);
    int especial, maluco;
    for(int i=0;i<N;i++){
        int aux=lower_bound(v[pai].begin(),v[pai].end(),i)-v[pai].begin();
        if(v[pai][aux]!=i&&i!=pai&&v[i].size()==1) especial=i;
        else if(v[pai][aux]!=i&&i!=pai) maluco=i;
    }
    for(int x : v[maluco]) freq[x]++;
    //cout << "!! " << especial << endl;
    int at=v[especial][0];
    marc[especial]++; marc[pai]++;
    for(int i=0;i<10;i++){
        marc[at]++;
        for(int x : v[at]) val[x]|=(1<<i);
        int nxt;
        for(int viz : v[at]){
            if(!marc[viz]&&freq[viz]) nxt=viz;
        }
        at=nxt;
    }
    for(int i=0;i<N;i++){
        if(marc[i]) continue;
        for(int x : v[i]) if(x>i&&marc[x]==0) MakeMap(val[x],val[i]);
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...