Submission #1327969

#TimeUsernameProblemLanguageResultExecution timeMemory
1327969KhoaDuy항공 노선도 (JOI18_airline)C++20
100 / 100
160 ms26320 KiB
#include "Alicelib.h"
#include<bits/stdc++.h>
using namespace std;
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],b[i]});
    }
    for(int i=1;i<=n;i++){
        for(int j=0;j<10;j++){
            if(i&(1<<j)){
                edges.push_back({i-1,n+j});
            }
        }
    }
    for(int i=0;i<10;i++){
        edges.push_back({n+i,n+10});
    }
    for(int i=0;i<n+10;i++){
        edges.push_back({i,n+11});
    }
    for(int i=0;i+1<10;i++){
        edges.push_back({n+i,n+i+1});

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

#include "Boblib.h"
#include<bits/stdc++.h>
using namespace std;
void Bob(int n,int m,int c[],int d[]){
	int N=n-12;
    int val[n];
    memset(val,-1,sizeof(val));
    int deg[n]={0};
    vector<vector<int>> graph(n);
    for(int i=0;i<m;i++){
        graph[c[i]].push_back(d[i]),graph[d[i]].push_back(c[i]);
        deg[c[i]]++,deg[d[i]]++;
    }
    int group[n]={0};
    for(int r=0;r<n;r++){
        if(deg[r]==n-2){
            val[r]=N+11;
            for(int u=0;u<n;u++){
                if(u!=r){
                    val[u]=N+10;
                }
            }
            for(int u:graph[r]){
                val[u]=-1;
            }
        }
    }
    for(int u=0;u<n;u++){
        if(val[u]!=-1){
            group[u]=2;
        }
    }
    int s=-1;
    for(int u=0;u<n;u++){
        if(val[u]==N+10){
            for(int v:graph[u]){
                group[v]=1;
            }
            for(int v:graph[u]){
                int cnt[2]={0};
                for(int w:graph[v]){
                    if(group[w]<=1){
                        cnt[group[w]]++;
                    }
                }
                if(cnt[1]==1&&cnt[0]==((N+1)/2)){
                    int s=v,tim=N;
                    while(true){
                        bool flag=false;
                        val[s]=tim;
                        tim++;
                        for(int w:graph[s]){
                            if(group[w]==1&&val[w]==-1){
                                s=w,flag=true;
                                break;
                            }
                        }
                        if(!flag){
                            break;
                        }
                    }
                }
            }
        }
    }
    vector<pair<int,int>> edges;
    for(int u=0;u<n;u++){
        if(!group[u]){
            for(int v:graph[u]){
                if(group[v]==1){
                    val[u]+=(1<<(val[v]-N));
                }
            }
        }
    }
    for(int u=0;u<n;u++){
        for(int v:graph[u]){
            if(u<v&&!group[u]&&!group[v]){
                edges.push_back({val[u],val[v]});
            }
        }
    }
    InitMap(N,edges.size());
    for(int i=0;i<edges.size();i++){
        MakeMap(edges[i].first,edges[i].second);
    }
}

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