From 3ba5633547659f39ca1bf8302faa8bbcddcb9f4d Mon Sep 17 00:00:00 2001
From: Bruno Freitas Tissei <bft15@inf.ufpr.br>
Date: Sun, 3 Feb 2019 16:25:38 -0200
Subject: [PATCH] Fix LCA

Signed-off-by: Bruno Freitas Tissei <bft15@inf.ufpr.br>
---
 alg2pdf                   |  91 ++++++++++++++++++++++++++++++++++++++
 contests/GYM_101492/K.cpp |  38 ++++++++++++++++
 contests/GYM_101492/a.out | Bin 15864 -> 0 bytes
 graph/lca.cpp             |  20 ++++-----
 4 files changed, 139 insertions(+), 10 deletions(-)
 create mode 100755 alg2pdf
 create mode 100644 contests/GYM_101492/K.cpp
 delete mode 100755 contests/GYM_101492/a.out

diff --git a/alg2pdf b/alg2pdf
new file mode 100755
index 0000000..8548db0
--- /dev/null
+++ b/alg2pdf
@@ -0,0 +1,91 @@
+#!/bin/bash
+
+# Random temp file name
+tex_file=$(mktemp)
+
+# Print the tex file header
+cat<<EOF >$tex_file
+\documentclass{article}
+\usepackage{listings}
+\usepackage[usenames,dvipsnames]{color}  %% Allow color names
+\usepackage[letterpaper, portrait, margin=1in]{geometry}
+
+%\lstdefinestyle{customasm}{
+%  belowcaptionskip=1\baselineskip,
+%  xleftmargin=\parindent,
+%  language=C++,   %% Change this to whatever you write in
+%  breaklines=true, %% Wrap long lines
+%  basicstyle=\footnotesize\ttfamily,
+%  commentstyle=\itshape\color{Gray},
+%  stringstyle=\color{Black},
+%  numberstyle=\color{Orange},
+%  keywordstyle=\bfseries\color{OliveGreen},
+%  identifierstyle=\color{blue},
+%}        
+
+\definecolor{darkgreen}{rgb}{0,0.6,0}
+\definecolor{darkpink}{rgb}{0.75,0.25,0.5}
+
+\lstdefinestyle{customasm}{
+  language=[ISO]C++,
+  breaklines=true, %% Wrap long lines
+  keywordstyle=\color{blue}\bfseries,
+  commentstyle=\color{darkgreen}\textit,
+  stringstyle=\color{darkpink}\ttfamily,
+  basicstyle=\footnotesize\ttfamily\color{red},
+  identifierstyle={\color{black}},
+%
+  literate=*
+  {;}{{{\color{black};}}}{1}
+  {.7}{{{\color{red}.7}}}{2},%
+%
+morekeywords={int32_t}
+}
+
+\usepackage[colorlinks=true,linkcolor=blue]{hyperref} 
+\begin{document}
+\tableofcontents
+
+EOF
+# xleftmargin=-8em,
+
+past_dir_name="00"
+
+find . -type f \( -iname \*.cpp -o -iname \*.cu \) |
+
+# Change ./foo/bar.src to foo/bar.src
+sed 's/^\..//' |
+
+# Loop through each file
+while read  i; do
+
+  dir_name=`echo $i | awk -F '/' '{print $1}' | sed 's/_/\\\_/g'`
+  file_name=`echo $i | awk -F '/' '{print $2}' | sed 's/_/\\\_/g'`
+
+  if [ "$dir_name" != "$past_dir_name" ]; then
+
+    # Start new section
+    echo "\newpage" >> $tex_file
+    echo "\section{$dir_name}" >> $tex_file
+  else
+    echo "\\" >> $tex_file
+  fi
+
+  # Create a section for each file
+  echo "\subsection{$file_name}" >> $tex_file
+
+  # This command will include the file in the PDF
+  echo "\lstinputlisting[style=customasm]{$i}" >>$tex_file
+
+  past_dir_name="$dir_name"
+
+done &&
+
+echo "\end{document}" >> $tex_file &&
+
+# This needs to be run twice for the TOC to be generated
+pdflatex $tex_file -output-directory . && 
+pdflatex $tex_file -output-directory .
+
+mv tmp.pdf caderno.pdf
+rm tmp.*
diff --git a/contests/GYM_101492/K.cpp b/contests/GYM_101492/K.cpp
new file mode 100644
index 0000000..86fbaf5
--- /dev/null
+++ b/contests/GYM_101492/K.cpp
@@ -0,0 +1,38 @@
+#include <bits/stdc++.h>
+
+#define MAX 0
+#define MOD 1000000007
+#define EPS 1e-6
+#define inf 0x3f3f3f3f
+#define llinf 0x3f3f3f3f3f3f3f3f
+
+#define fi first
+#define se second
+#define sz size()
+#define pb push_back
+#define ende '\n'
+
+#define all(x) (x).begin(), (x).end()
+#define rall(x) (x).rbegin(), (x).rend()
+#define mset(x, y) memset(&x, (y), sizeof(x))
+
+using namespace std; 
+
+typedef long long ll;
+typedef pair<int,int> ii;
+
+int main() {
+  ios::sync_with_stdio(0);
+  cin.tie(0);
+
+  int n; cin >> n;
+  ll ans = 1;
+  for (int i = 0; i < n + 1; ++i)
+    ans *= 2;
+
+  cout << ans - 1 << ende;
+
+
+
+  return 0;
+}
diff --git a/contests/GYM_101492/a.out b/contests/GYM_101492/a.out
deleted file mode 100755
index a4b473e8015bfd52a1fb16903b06de6b96e6d49d..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 15864
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
NLR9>NP;e4mKLEx!z!U%g

diff --git a/graph/lca.cpp b/graph/lca.cpp
index bd50708..77b874c 100644
--- a/graph/lca.cpp
+++ b/graph/lca.cpp
@@ -11,21 +11,22 @@
  *      *** = used in both * and **
  */
 
-vector<ii> graph[MAX];
+vector<int> graph[MAX]; //*** vector<ii>
 
 int h[MAX];
-int par[MAX][MAXLOG], cost[MAX][MAXLOG];
+int par[MAX][MAXLOG];
+//*** int cost[MAX][MAXLOG];
 
 // Perform DFS while filling h, par, and cost
 void dfs(int v, int p = -1, int c = 0) {
   par[v][0] = p;
   //*** cost[v][0] = c;
 
-  if (p + 1)
+  if (p != -1)
     h[v] = h[p] + 1;
 
   for (int i = 1; i < MAXLOG; ++i)
-    if (par[v][i - 1] + 1) {
+    if (par[v][i - 1] != -1) {
       par[v][i] = par[par[v][i - 1]][i - 1];
       //* cost[v][i] += cost[v][i - 1] + cost[par[v][i - 1]][i - 1];
       //** cost[v][i] = max(cost[v][i], max(cost[par[v][i-1]][i-1], cost[v][i-1]));
@@ -40,7 +41,7 @@ void dfs(int v, int p = -1, int c = 0) {
 // Preprocess tree rooted at v
 void preprocess(int v) {
   memset(par, -1, sizeof par);
-  memset(cost, 0, sizeof cost);
+  //*** memset(cost, 0, sizeof cost);
   dfs(v);
 }
 
@@ -53,25 +54,24 @@ int query(int p, int q) {
     swap(p, q);
 
   for (int i = MAXLOG - 1; i >= 0; --i)
-    if (par[p][i] + 1 && h[par[p][i]] >= h[q]) {
+    if (par[p][i] != -1 && h[par[p][i]] >= h[q]) {
       //* ans += cost[p][i];
       //** ans = max(ans, cost[p][i]);
       p = par[p][i];
     }
 
   if (p == q)
-    return p;
-    //*** return ans;
+    return p; //*** return ans;
 
   for (int i = MAXLOG - 1; i >= 0; --i)
-    if (par[p][i] + 1 && par[p][i] != par[q][i]) {
+    if (par[p][i] != -1 && par[p][i] != par[q][i]) {
       //* ans += cost[p][i] + cost[q][i];
       //** ans = max(ans, max(cost[p][i], cost[q][i]));
       p = par[p][i];
       q = par[q][i];
     }
 
-  return cost[p][0];
+  return par[p][0];
 
   //* if (p == q) return ans;
   //* else return ans + cost[p][0] + cost[q][0];
-- 
GitLab