原创 循環鏈表——建立與輸出

在建立單鏈表的基礎上注意把 p->next=NULL改爲p->next=head;(輸出同理) 喜歡擼代碼: /*循環鏈表 circular linked list*/ /*lenth=n*/ #include<stdio.h> #in

原创 巴什博弈 HDU-1846

描述:一堆石子有 n 個 ,兩個人開始輪流取,每人最多取m個,最少取1個,最後一個將石子取完的是贏家。 思路:對於先手來說,如果有(m+1)個石子,先手取 k 個,後手就可以取 m+1-k 個,所以有式子 n=(m+1)*r+s ,s<=

原创 java 環境變量配置與第一個程序運行

從開始下載jdk,到運行出java第一個程序 ,花了5天時間 ,不過我相信萬事開頭難 ,以後會越來越好的 ,加油! jdk的下載: 在oracle官網上即可下載,jdk安裝包,下載完以後運行安裝 ,路徑默認c盤 ,我沒有改 ,因爲改了就安

原创 二維線段樹 poj-2155

題意:t組樣例 ,輸入 n,m,表示n*n的矩陣進行m次操作 ,C: 輸入兩個座標 ,組成的矩形 進行取反操作 ,Q:對輸的座標位置輸入其值。 思路:一開始想的是用1000(表示x軸)個線段樹(對每段y進行操作)來記錄,也是二維的 ,第一

原创 (線段樹 -星星等級)Stars POJ - 2352

題意: 給出n個星星的座標 x,y ,當存在其他星星的座標x1,y1滿足x>=x1&&y>=y1時 這個星星的等級就加1。 注意: 題中給的數據是有規律的 ,y是逐漸增加的 ,若y相等時x是逐漸增加的 。 思路: ~~怎麼都沒想

原创 建立單鏈表——頭插法 和 尾插法

因爲markdown編譯能力有限 ,暫時上圖片吧,我覺得也挺方便的 又在爲自己菜找藉口了 我看着自己畫的圖就把代碼敲出來了,不算難。     上代碼: #include<iostream> #include<stdio.h> usin

原创 線段樹(區間合併)HDU - 1540

題意:輸入n,m,給定n個相互連通的村莊,有m個操作,D x,表示破壞x村莊使其與相鄰的兩個村莊不相通,R 表示修復上一個被破壞的村莊,與相鄰的兩個村莊聯通。Q x表示與x相連的村莊有多少個。 思路:一開始只知道是線段樹,想着肯定得用結構

原创 兩個有序鏈表的合併

給兩組有序鏈表,都是以-1結尾,將兩個有序鏈表合爲一個有序鏈表並輸出。 注意: 這裏面是將a,b兩鏈表合併到a的表頭裏面了 #include<bits/stdc++.h> using namespace std; struct n

原创 差分約束系統 模板

先來理解一下:有一個已經求好的dis[]最短路數組,有一條邊x->y權值爲w,那麼一定存在dis[y]<=dis[x]+w,即dis[y]-dis[x]<=w; 那麼什麼是差分約束系統呢,就是給我一些不等式,我可以用最短路的思想把他們轉化

原创 AC自動機(初步學習)

一開始講AC自動機就是在字典樹上做一個KMP,嚇得我感覺好難,不過了解了以後,感覺也就是有點難度,不嚇人。 它只是在字典樹上用了KMP的思想 典型問題:給n個模式串和一個文本串,問有多少個模式串在文本串中出現過。 暴力字典樹的思路:將n個

原创 區間dp暫時的理解

因爲剛剛看了區間dp,所以寫一下對區間dp的理解。 例題: 石子歸併 51Nod - 1021 看了一篇博客,覺得他說得比較容易理解,所以再次重複一遍: 假如你是上帝,已經知道了1~n堆石子的最優解,那麼它肯定是由兩個子堆組成的, 同理

原创 割點和圖(割邊)

割點: 在連通的無向圖中,刪除一個點和與它所相連的邊,無向圖不再連通,說明這個點是割點。 思路: 從一個點開始深搜,當這個點不經過他的父親節點不能返回到比這個父節點更早的時間戳,說明這個點的父節點是割點。 low[v]>=dfn[

原创 CodeForces - 1006F (深搜從兩端向中間搜,省時)

題意:輸入n,m,k,給出一個n*m的圖,裏面有權值,從1,1一路異或到n,m,只能向右或向下走,等於k有多少種路徑。 思路:一開始就是直接暴力寫個深搜,穩穩的超時,分析一下時間複雜度。每個點有兩個方向,如果真的給20*20的圖,最起碼到

原创 倍增法求LCA

解決的問題:在一棵樹上求u,v的最近公共祖先。 思路:預處理parents數組和depth數組,首先使u,v深度相同,一起向上迭代,直至找到相同父節點 /*倍增法求LCA*/ #include<stdio.h> #include<vec

原创 最小生成樹(次小生成樹)(最小生成樹不唯一) 模板:Kruskal算法和 Prim算法

Kruskal模板:按照邊權排序,開始從最小邊生成樹 #include<algorithm> #include<stdio.h> #include<string.h> #include<iostream> #define N 1000+