Submission #69063

#TimeUsernameProblemLanguageResultExecution timeMemory
69063IvanCAirline Route Map (JOI18_airline)C++17
100 / 100
722 ms31120 KiB
#include "Alicelib.h" #include <bits/stdc++.h> using namespace std; const int MAXN = 1020; static vector<int> grafo[MAXN]; void Alice( int N, int M, int A[], int B[] ){ if(N == 1){ InitG(1,0); return; } if(N == 2){ if(M == 0){ InitG(2,0); } else{ InitG(2,1); MakeG(0,0,1); } return; } // Padrao for(int i = 0;i<M;i++){ int x = A[i]; int y = B[i]; x++;y++; // 1-indexado, se nao falha grafo[x].push_back(y); grafo[y].push_back(x); } int qtd_n = N + 12; int qtd_m = 0; // Bits for(int i = 0;i<10;i++){ int pot = (1 << i); int idx = N + i + 1; for(int j = 1;j<=N;j++){ if(pot & j){ grafo[j].push_back(idx); grafo[idx].push_back(j); } } } // Ligacao bits for(int i = 0;i+1<10;i++){ int idx1 = N + i + 1; int idx2 = N + i + 2; grafo[idx1].push_back(idx2); grafo[idx2].push_back(idx1); } //folha grafo[N+11].push_back(N+12); grafo[N+12].push_back(N+11); // grau alto for(int i = 1;i<=N;i++){ grafo[i].push_back(N+12); grafo[N+12].push_back(i); } for(int i = 1;i<=N+12;i++) qtd_m += grafo[i].size(); qtd_m /=2; InitG(qtd_n,qtd_m); int ptr = 0; for(int i = 1;i<=N+12;i++){ for(int j : grafo[i]){ if(i >= j) continue; //printf("Ptr %d Alice I %d J %d\n",ptr,i,j); MakeG(ptr,i-1,j-1); ptr++; } } }
#include "Boblib.h" #include <bits/stdc++.h> using namespace std; const int MAXN = 1020; static vector<int> grafo[MAXN]; static int ehValido[MAXN],somatorio[MAXN]; void Bob( int V, int U, int C[], int D[] ){ //printf("##############################\n"); memset(ehValido,0,sizeof(ehValido)); memset(somatorio,0,sizeof(somatorio)); // caso especial if(V == 1){ InitMap(1,0); return; } if(V == 2){ if(U == 0){ InitMap(2,0); } else{ InitMap(2,1); MakeMap(0,1); } return; } int N = V - 12,M = 0,especial = 0,bit_davez = 0; // recuperando o grafo for(int i = 0;i<U;i++){ int x = C[i]; int y = D[i]; x++;y++; grafo[x].push_back(y); grafo[y].push_back(x); //printf("G %d %d\n",x,y); } vector<int> candidatos; for(int i = 1;i<=N+12;i++){ if(grafo[i].size() == 1) candidatos.push_back(i); } if(candidatos.size() == 1){ int folha = candidatos[0]; especial = grafo[folha][0]; for(int i : grafo[especial]){ ehValido[i] = 1; } int menor_grau = 1024; for(int i = 1;i<=N+12;i++){ if(ehValido[i]) continue; if(grafo[i].size() <= menor_grau){ menor_grau = grafo[i].size(); bit_davez = i; } } } else if(candidatos.size() == 2){ int primeiro_cand = candidatos[0]; int outro_cara = grafo[primeiro_cand][0]; if(grafo[outro_cara].size() == N + 1){ especial = outro_cara; bit_davez = candidatos[1]; } else{ bit_davez = primeiro_cand; especial = grafo[candidatos[1]][0]; } for(int i : grafo[especial]){ ehValido[i] = 1; } } ehValido[candidatos[0]] = 0; if(candidatos.size() == 2) ehValido[candidatos[1]] = 0; for(int vez = 9;vez>=0;vez--){ int nxt = 0,pot = (1 << vez); //printf("Meu %d\n",bit_davez); for(int i : grafo[bit_davez]){ if(grafo[i].size() <= 1){ continue; } if(!ehValido[i]){ nxt = i; } else{ //printf("Add %d AH %d\n",pot,i); somatorio[i] += pot; } } grafo[bit_davez].clear(); bit_davez = nxt; } for(int i = 1;i<=N+12;i++){ for(int j : grafo[i]){ if(!ehValido[i] || !ehValido[j]) continue; if(i <= j){ M++; } } } InitMap(N,M); for(int i = 1;i<=N+12;i++){ for(int j : grafo[i]){ if(!ehValido[i] || !ehValido[j]) continue; if(i <= j){ //printf("Bob I %d J %d (%d %d)\n",i,j,somatorio[i]-1,somatorio[j]-1); MakeMap(somatorio[i] - 1,somatorio[j] - 1); } } } }

Compilation message (stderr)

Bob.cpp: In function 'void Bob(int, int, int*, int*)':
Bob.cpp:60:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    if(grafo[i].size() <= menor_grau){
       ~~~~~~~~~~~~~~~~^~~~~~~~~~~~~
Bob.cpp:69:31: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   if(grafo[outro_cara].size() == N + 1){
      ~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...