Submission #313392

#TimeUsernameProblemLanguageResultExecution timeMemory
313392LawlietAirline Route Map (JOI18_airline)C++17
100 / 100
879 ms31512 KiB
#include "Alicelib.h" #include <bits/stdc++.h> const int MAXN = 1010; const int MAXM = 1000010; using namespace std; typedef pair<int,int> pii; vector<pii> ans; void Alice(int N, int M, int A[], int B[]) { if( N == 1 ) return void( InitG( 1 , 0 ) ); for(int i = 0 ; i < M ; i++) ans.push_back( { A[i] , B[i] } );//Grafo original for(int i = 1 ; i <= N ; i++) for(int j = 0 ; j < 10 ; j++) if( i & (1 << j) ) ans.push_back( { i - 1 , j + N } );//Representação binária for(int i = N ; i < N + 9 ; i++) ans.push_back( { i , i + 1 } );//Linha de bits for(int i = 0 ; i < N ; i++) ans.push_back( { i , N + 10 } );//A ans.push_back( { N + 10 , N + 11 } );//Folha InitG( N + 12 , (int)ans.size() ); for(int i = 0 ; i < (int)ans.size() ; i++) MakeG( i , ans[i].first , ans[i].second ); }
#include "Boblib.h" #include <bits/stdc++.h> using namespace std; typedef pair<int,int> pii; const int MAXN = 2000; int perm[MAXN]; int value[MAXN]; bool mark[MAXN]; bool isOriginal[MAXN]; vector<int> bits; vector<int> adj[MAXN]; bool cmp(int i, int j) { return adj[i].size() > adj[j].size(); } void DFS(int cur) { mark[cur] = true; for(int i = 0 ; i < (int)adj[cur].size() ; i++) if( !mark[ adj[cur][i] ] ) DFS( adj[cur][i] ); bits.push_back( cur ); } void Bob(int V, int U, int C[], int D[]) { if( V == 1 ) return void( InitMap( 1 , 0 ) ); for(int i = 0 ; i < U ; i++) { adj[ C[i] ].push_back( D[i] ); adj[ D[i] ].push_back( C[i] ); } int leaf = -1; for(int i = 0 ; i < V ; i++) { if( (int)adj[i].size() > 1 ) continue; if( leaf == -1 ) { leaf = i; continue; } int vizI = adj[i].back(); int vizLeaf = adj[leaf].back(); if( (int)adj[vizLeaf].size() < (int)adj[vizI].size() ) leaf = i; } int A = adj[leaf].back(); mark[A] = true; for(int i = 0 ; i < (int)adj[A].size() ; i++) { mark[ adj[A][i] ] = true; isOriginal[ adj[A][i] ] = ( adj[A][i] != leaf ); } int last = -1; for(int i = 0 ; i < V ; i++) { if( mark[i] ) continue; if( last == -1 ) last = i; else if( adj[i].size() < adj[last].size() ) last = i; } DFS( last ); for(int i = 0 ; i < (int)bits.size() ; i++) mark[ bits[i] ] = false; for(int i = 0 ; i < (int)bits.size() ; i++) value[ bits[i] ] = (1 << i); for(int i = 0 ; i < V ; i++) { if( !mark[i] || i == A || i == leaf ) continue; for(int j = 0 ; j < (int)adj[i].size() ; j++) if( !mark[ adj[i][j] ] ) perm[i] += value[ adj[i][j] ]; perm[i]--; } vector<pii> edges; for(int i = 0 ; i < U ; i++) if( isOriginal[ C[i] ] && isOriginal[ D[i] ] ) edges.push_back( { perm[ C[i] ] , perm[ D[i] ] } ); InitMap( V - 12 , (int)edges.size() ); for(int i = 0 ; i < (int)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...