原创 LCA-Tarjan離線+鏈式前向星

LCA:最近公共祖先問題 解決方法:        1. 採用鏈式前行星存圖,可以優化空間佔用和遍歷速度        2. Tarjan離線可以一次性處理所有的請求,時間複雜度爲O(n+q)   下面簡單介紹下Tarjan離線求LCA:

原创 LeetCode-劍指 Offer 二叉搜索樹與雙向鏈表

題目鏈接 題意 將一棵二叉搜索樹的結點按照從小到大的順序構建成一個雙向鏈表,要求不能創建新的節點。 思路 首先很容易想到對二叉樹的中序遍歷可以得到升序的結點序列。 其次,維護一個頭結點head,和一個始終指向當前最後一個結點的prev。

原创 判斷最長迴文串——暴力、延展、Manacher

1. 暴力 時間複雜度O(n^3)。 2. 延展  以某一字符爲中心,設置left, right兩個變量同時向外擴,判斷他們指向字符是否相同。注意分奇偶討論。時間複雜度O(n^2)。 3. Manacher 馬拉車  代碼註釋: 1

原创 [部分內容摘自網絡]性質定理小結

1. 給定四個點,判斷能否組成正方形 求出任意兩點之間的六條邊後,從小到大排序。 如果前四條邊相等,後兩條邊相等,且後兩條邊的長度大於前四條邊邊,則可以組成正方形。 2. 歐拉定理 連通圖: 設一個二維幾何圖形的

原创 淺析連通分量low數組

2019-08-20 08:50:53 上午 dfn[] 數組代表的是時間戳,即結點訪問的時間次序。不是結點所在的深度。 以其他的點作跳板,達到所能達到的時間戳最小的結點。這是沒有意義的,因爲只要把中間的任意一個結點刪去,這條“橋”

原创 割邊 + 縮點(得到邊連通分量) + 樸素LCA

用到的算法 割邊 + 縮點(得到邊連通分量) + 樸素LCA 算法解析 無向圖區分重邊與同一條邊的反方向: 對每一條邊都用一個變量id來標識,一條無向邊的兩個方向用同一個id表示。 割邊: c++ if(low[v] > df

原创 (非線段樹)區間修改_單點查詢

區間修改,單點查詢的問題(非線段樹) 因爲線段樹忘了具體的操作方式,所以不知道線段樹爲啥不行,該補補線段樹了 因爲區間太大了,所以不能暴力直接對數組進行標記。 解決方案 採用設置兩個容器(分別記爲head,tail)的方法,分別存儲一段

原创 無向圖求割邊

1 //無向圖求割邊 2 #include <cstdio> 3 #include <cstdlib> 4 #include <cstring> 5 #include <cmath> 6 #include <algorithm

原创 【轉載】帶權並查集經典例題

1 #include <cstdio> 2 #include <cstdlib> 3 #include <cstring> 4 #include <iostream> 5 //#define INPUT 6 /**

原创 二維線段樹之矩形樹 _求解矩陣和問題

1 //zoj 2859 2 // 二維線段樹之矩形樹 求解矩陣和問題 3 #include <cstdio> 4 #include <cstdlib> 5 #include <cstring> 6 #inclu

原创 二維線段樹之樹套樹

1 //poj1195 二維線段樹之樹套樹 2 // 先確定橫座標所在的區間並記錄該結點的編號p,然後再確定縱座標所在的區間並記錄該結點的編號cur,則tree[cur][p]爲目標區間。 3 #include <cstdio

原创 判平行四邊形的個數

1 // D題 判平行四邊形的個數 忘記了數學方法 2 #include<cstdio> 3 #include<cstdlib> 4 #include<cstring> 5 #include<cmath> 6 #includ

原创 最短路 vector不T

1 //A vector不T 2 // 最短路 SPFA 3 // in數組 4 5 #include<cstdio> 6 #include<cstdlib> 7 #include<cstring>

原创 藍橋杯 飲料換購 數學推導

題目描述 樂羊羊飲料廠正在舉辦一次促銷優惠活動。樂羊羊C型飲料,憑3個瓶蓋可以再換一瓶C型飲料,並且可以一直循環下去(但不允許暫借或賒賬)。請你計算一下,如果小明不浪費瓶蓋,儘量地參加活動。那麼,對於他初始買入的n瓶飲料,最後他一共能

原创 Harmonic Number (II) 數學找規律

I was trying to solve problem '1234 - Harmonic Number', I wrote the following code long long H( int n ) {    long long