Submission #6135

#TimeUsernameProblemLanguageResultExecution timeMemory
6135gs13068한자 끝말잇기 (JOI14_kanji)C++98
32 / 100
242 ms11724 KiB
#include "Annalib.h"

static long long D[300][300];

void Anna(int N,int M,int A[],int B[],long long C[],int Q,int S[],int T[],int K,int U[])
{
  int i,j,k;
  for(i=0;i<N;i++)for(j=0;j<N;j++)D[i][j]=4e18;
  for(i=0;i<N;i++)D[i][i]=0;
  for(i=0;i<M;i++)D[A[i]][B[i]]=C[i];
  for(k=0;k<N;k++)for(i=0;i<N;i++)for(j=0;j<N;j++)if(D[i][j]>D[i][k]+D[k][j])D[i][j]=D[i][k]+D[k][j];
  for(i=0;i<Q;i++)
  {
    for(j=0;j<K;j++)if(D[S[i]][A[U[j]]]+C[U[j]]+D[B[U[j]]][T[i]]==D[S[i]][T[i]])break;
    if(j<2)
    {
      Tap(0);
      Tap(j&1);
    }
    else
    {
      Tap(1);
      Tap(j>>2);
      Tap(j&1);
    }
  }
}
#include "Brunolib.h"

static long long D[300][300];
static int V[300][300];

static void answer(int i,int j)
{
  if(V[i][j]>0)Answer(V[i][j]-1);
  if(V[i][j]<0)
  {
    answer(i,-V[i][j]-1);
    answer(-V[i][j]-1,j);
  }
}

void Bruno(int N,int M,int A[],int B[],long long C[],int Q,int S[],int T[],int K,int U[],int L,int X[])
{
  int i,j,k;
  for(i=0;i<N;i++)for(j=0;j<N;j++)D[i][j]=4e18;
  for(i=0;i<M;i++)if(C[i]>0)
  {
    D[A[i]][B[i]]=C[i];
    V[A[i]][B[i]]=i+1;
  }
  for(i=0;i<N;i++)
  {
    D[i][i]=0;
    V[i][i]=0;
  }
  for(k=0;k<N;k++)for(i=0;i<N;i++)for(j=0;j<N;j++)if(D[i][j]>D[i][k]+D[k][j])
  {
    D[i][j]=D[i][k]+D[k][j];
    V[i][j]=-k-1;
  }
  k=0;
  for(i=0;i<Q;i++)
  {
    if(X[k]==0)
    {
      j=X[k+1];
      k+=2;
    }
    else
    {
      j=((X[k]<<2)|(X[k+1]<<1)|X[k+2])-2;
      k+=3;
    }
    if(j<K)
    {
      answer(S[i],A[U[j]]);
      Answer(U[j]);
      answer(B[U[j]],T[i]);
    }
    else answer(S[i],T[i]);
    Answer(-1);
  }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...