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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

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