/* Fast string data comparison. Caveat: unaligned access to 1st string! */ static LJ_AINLINE int str_fastcmp(constchar*a, constchar*b, MSize len) { MSize i =0; lua_assert(len >0); lua_assert((((uintptr_t)a + len) & (LJ_PAGESIZE-1)) <= LJ_PAGESIZE-4); do { /* Note: innocuous access up to end of string + 3. */ uint32_t v = lj_getu32(a+i) ^*(const uint32_t *)(b+i); if (v) { i -= len; #if LJ_LE return (int32_t)i >=-3? (v << (32+(i<<3))) : 1; #else return (int32_t)i >=-3? (v >> (32+(i<<3))) : 1; #endif } i +=4; } while (i < len); return0; }
]]>灝忕▼搴忥細緇欏嚭n涓暟錛屽浣曟壘鍑轟笁涓暟錛屽畠浠殑鍜岀瓑浜巏http://www.shnenglu.com/varg-vikernes/archive/2010/11/21/134244.html緋背緋背Sun, 21 Nov 2010 15:10:00 GMThttp://www.shnenglu.com/varg-vikernes/archive/2010/11/21/134244.htmlhttp://www.shnenglu.com/varg-vikernes/comments/134244.htmlhttp://www.shnenglu.com/varg-vikernes/archive/2010/11/21/134244.html#Feedback0http://www.shnenglu.com/varg-vikernes/comments/commentRss/134244.htmlhttp://www.shnenglu.com/varg-vikernes/services/trackbacks/134244.html浣嗗彲浠ユ湁灝忓皬浼樺寲錛?br>涓銆傚厛鎺掑簭 浜屻傛灇涓緄, j, k鐨勬椂鍊欙紝鍥哄畾i鐨勬椂鍊欙紝j鍜宬鍒嗗埆浠庡乏浠庡彸鎵弿鏁扮粍錛岀洿鍒頒袱涓鍒頒負姝€?br>涓夈傚浜庢瘡涓猧錛宬浠庡彸鎵弿鐨勫紑濮嬩綅緗槸閫掑噺鐨勩?br> 鐒跺悗灝辨湁浜嗕笅闈㈢殑灝忕▼搴忥細
#include <stdio.h> #include <iostream> #include <algorithm> usingnamespace std; int N =10; int K =5; int arr[] ={1, 2, 5, 4, 5, 10, 2, 3, 5, 1}; int main() { int a, b, c, i; sort(arr, arr + N); c = N -1; for (a =0; a < c; a++) { for (b = a +1; b < c; b++) { while (c >=0&& arr[a] + arr[b] + arr[c] > K) c--; for (i = c; b < i; b++) { while (i >=0&& arr[a] + arr[b] + arr[i] > K) i--; if (i >=0&& arr[a] + arr[b] + arr[i] == K) printf("%d %d %d\n", arr[a], arr[b], arr[i]); } } } return0; }
]]>Dinic 綆楁硶妯℃澘http://www.shnenglu.com/varg-vikernes/archive/2010/08/12/123176.html緋背緋背Thu, 12 Aug 2010 06:33:00 GMThttp://www.shnenglu.com/varg-vikernes/archive/2010/08/12/123176.htmlhttp://www.shnenglu.com/varg-vikernes/comments/123176.htmlhttp://www.shnenglu.com/varg-vikernes/archive/2010/08/12/123176.html#Feedback4http://www.shnenglu.com/varg-vikernes/comments/commentRss/123176.htmlhttp://www.shnenglu.com/varg-vikernes/services/trackbacks/123176.htmlDinic綆楁硶鏄竴縐嶆瘮杈冨鏄撳疄鐜扮殑錛岀浉瀵規瘮杈冨揩鐨勬渶澶ф祦綆楁硶銆?br>浠婂ぉ鐪嬩簡涓涓嬪畠鐨勫師鐞嗭紝鍙戠幇鐨勭‘寰堢墰閫箋?br> 姹傛渶澶ф祦鐨勬湰璐紝灝辨槸涓嶅仠鐨勫鎵懼騫胯礬寰勩傜洿鍒版壘涓嶅埌澧炲箍璺緞涓烘銆?br>瀵逛簬榪欎釜涓鑸х殑榪囩▼錛孌inic綆楁硶鐨勪紭鍖栧涓嬶細
錛?錛?br>Dinic綆楁硶棣栧厛瀵瑰浘榪涜涓嬈FS錛岀劧鍚庡湪BFS鐢熸垚鐨勫眰嬈″浘涓繘琛屽嬈FS銆?br>灞傛鍥劇殑鎰忔濆氨鏄紝鍙湁鍦˙FS鏍戜腑娣卞害鐩稿樊1鐨勮妭鐐規墠鏄繛鎺ョ殑銆?br>榪欏氨鍒囨柇浜嗗師鏈夌殑鍥句腑鐨勮澶氫笉蹇呰鐨勮繛鎺ャ傚緢鐗涢鹼紒 榪欐槸闇瑕佽瘉鏄庣殑錛屼及璁¤瘉鏄庝篃寰堝鏉傘?br> 錛?錛?br>闄ゆ涔嬪錛屾瘡嬈FS瀹屽悗錛屼細鎵懼埌璺緞涓閲忔渶灝忕殑涓鏉¤竟銆?br>鍦ㄨ繖鏉¤竟涔嬪墠鐨勮礬寰勭殑瀹歸噺鏄ぇ浜庣瓑浜庤繖鏉¤竟鐨勫閲忕殑銆?br>閭d箞浠庤繖鏉¤竟涔嬪墠鐨勭偣錛屽彲鑳藉紩鍙戝嚭鍒殑澧炲箍璺緞銆?br>姣斿璇?nbsp;S -> b -> c -> d -> T 鏄竴鏉″騫胯礬寰勶紝瀹歸噺鏈灝忕殑杈規槸 b -> c銆?br>鍙兘瀛樺湪涓鏉?S -> b -> e -> f -> g -> T 榪欐牱鐨勫騫胯礬寰勩?br>榪欐牱鐨勮瘽錛屽湪鎵懼埌絎竴鏉″騫胯礬寰勫悗錛屽彧闇瑕佸洖婧埌 b 鐐癸紝灝卞彲浠ョ戶緇壘涓嬪幓浜嗐?br>榪欐牱鍋氱殑濂藉鏄紝閬垮厤浜嗘壘鍒頒竴鏉¤礬寰勫氨浠庡ご寮濮嬪鎵懼彟澶栦竴鏉$殑寮閿銆?br>涔熷氨鏄啀嬈′粠 S 瀵繪壘鍒?b 鐨勫紑閿銆?br>榪欎釜榪囩▼鐪嬩技澶嶆潅錛屼絾鏄唬鐮佸疄鐜拌搗鏉ュ緢浼橀泤錛屽洜涓哄畠鐨勬湰璐ㄥ氨鏄洖婧紒
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <limits.h> #define MAX_VETXS 1024 #define MAX_EDGES 1024 int E[MAX_EDGES], next[MAX_EDGES], C[MAX_EDGES], M; int V[MAX_VETXS], L[MAX_VETXS], Q[MAX_VETXS], N; int S, T; void __insert(int from, int to, int cap) { M++; C[M] = cap; E[M] = to; next[M] = V[from]; V[from] = M; } void insert(int from, int to, int cap) { __insert(from, to, cap); __insert(to, from, 0); } int bfs() { int h, t, e, u, v; h = t =0; Q[t++] = S; memset(L, 0, N*sizeof(L[0])); L[S] =1; while (h != t) { u = Q[h++]; for (e = V[u]; e; e = next[e]) { v = E[e]; if (!L[v] && C[e] >0) { L[v] = L[u] +1; Q[t++] = v; } } } return L[T]; } int dfs() { int t, u, v, e, i, f, r, back; t =1; r =0; while (t) { u = (t ==1) ? S : E[Q[t -1]]; if (u == T) { f = INT_MAX; for (i =1; i < t; i++) { e = Q[i]; if (C[e] < f) { f = C[e]; back = i; } } for (i =1; i < t; i++) { e = Q[i]; C[e] -= f; C[e^1] += f; } r += f; t = back; }else{ for (e = V[u]; e; e = next[e]) { v = E[e]; if (L[v] == L[u] +1&& C[e] >0) break; } if (e) Q[t++] = e; else{ t--; L[u] =0; } } } return r; } int dinic() { int f =0; while (bfs()) f += dfs(); return f; } int main() { int n, m, a, b, c, i; freopen("d:\\in.txt", "r", stdin); while (scanf("%d%d", &n, &m) != EOF) { S =0; T = m -1; N = m; memset(V, 0, N*sizeof(V[0])); M =2; for (i =0; i < n; i++) { scanf("%d%d%d", &a, &b, &c); insert(a -1, b -1, c); } printf("%d\n", dinic()); } return0; }
]]>[杞琞LCA闂錛堝惈RMQ鐨凷T綆楁硶錛?http://www.shnenglu.com/varg-vikernes/archive/2010/03/10/109355.html緋背緋背Wed, 10 Mar 2010 06:14:00 GMThttp://www.shnenglu.com/varg-vikernes/archive/2010/03/10/109355.htmlhttp://www.shnenglu.com/varg-vikernes/comments/109355.htmlhttp://www.shnenglu.com/varg-vikernes/archive/2010/03/10/109355.html#Feedback1http://www.shnenglu.com/varg-vikernes/comments/commentRss/109355.htmlhttp://www.shnenglu.com/varg-vikernes/services/trackbacks/109355.htmlhttp://www.shnenglu.com/Icyflame/
涓銆佸畾涔変笌瀹氱悊 LCA錛歀east Common Ancestors錛堟渶榪戝叕鍏辯鍏堬級錛屽浜庝竴媯墊湁鏍規爲T鐨勪換鎰忎袱涓妭鐐箄錛寁錛屾眰鍑篖CA(T, u, v)錛屽嵆紱昏窡鏈榪滅殑鑺傜偣x錛屼嬌寰梮鍚屾椂鏄痷鍜寁鐨勭鍏堛?br> 鍦ㄧ嚎綆楁硶錛氱敤姣旇緝闀跨殑鏃墮棿鍋氶澶勭悊錛屼絾鏄瓑淇℃伅鍏呰凍浠ュ悗姣忔鍥炵瓟璇㈤棶鍙渶瑕佺敤姣旇緝灝戠殑鏃墮棿銆?br> 紱葷嚎綆楁硶錛氬厛鎶婃墍鏈夌殑璇㈤棶璇誨叆錛岀劧鍚庝竴璧鋒妸鎵鏈夎闂洖絳斿畬鎴愩?br> RMQ錛氱粰鍑轟竴涓暟緇凙錛屽洖絳旇闂甊MQ(A, i, j)錛屽嵆A[i...j]涔嬮棿鐨勬渶鍊肩殑涓嬫爣銆?br>浜屻丏FS+RMQ 1錛塖parse Table錛圫T錛夌畻娉?br> 鎻忚堪錛?/strong>
1//鍒濆鍖?/span> 2INIT_RMQ 3//max[i][j]涓瓨鐨勬槸閲峧寮濮嬬殑i涓暟鎹腑鐨勬渶澶у鹼紝鏈灝忓肩被浼鹼紝num涓瓨鏈夋暟緇勭殑鍊?/span> 4for i : 1 to n 5 max[0][i] = num[i] 6for i : 1 to log(n)/log(2) 7for j : 1 to n 8 max[i][j] = MAX(max[i-1][j], max[i-1][j+2^(i-1)] 9//鏌ヨ 10RMQ(i, j) 11 k = log(j-i+1) / log(2) 12return MAX(max[k][i], max[k][j-2^k+1])