亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運營的一線實戰(zhàn)洞察。

如何找到第 K 短的路徑?——從 Dijkstra 到 Yen 算法

如何找到第 K 短的路徑?——從 Dijkstra 到 Yen 算法 Dijkstra 和反向 Dijkstra 到底分別在什么場景下使用圖中的第 K 短路徑要怎么找如果允許重復(fù)經(jīng)過節(jié)點或者要求路徑不能重復(fù)經(jīng)過節(jié)點處理方式有什么不同當(dāng)路徑還帶有等待時間約束時算法又該如何改造本文會通過四類題型由淺入深地講解這些問題。一、標(biāo)準(zhǔn) Dijkstra 算法的描述和應(yīng)用Dijkstra 算法是用來求解非負(fù)權(quán)圖上的單源最短路徑問題的經(jīng)典方法從一個源點出發(fā)求它到圖中其余節(jié)點的最短距離。有向圖和無向圖都可以使用但只要存在負(fù)權(quán)邊Dijkstra 的貪心性質(zhì)就不再成立這時需要使用到 Bellman-Ford 算法但這已經(jīng)超出本文的討論范圍。在具體實現(xiàn)上我們維護(hù)一個dist數(shù)組dist[v]表示當(dāng)前已經(jīng)找到的、從起點到節(jié)點v的最短距離上界。在算法運行過程之中這個值可能經(jīng)過多次松弛而逐漸變小??梢园?Dijkstra 類比成將普通 BFS 的先進(jìn)先出隊列換成按照當(dāng)前路徑長度排序的優(yōu)先隊列更準(zhǔn)確地說它每次選取暫定距離最小的狀態(tài)(distance, u)再遍歷u的所有鄰邊。如果經(jīng)過u能讓相鄰節(jié)點v的距離變得更小就更新dist[v]這一過程稱為松弛。由于所有邊權(quán)都非負(fù)一個沒有過期的狀態(tài)從堆頂彈出時對應(yīng)節(jié)點的最短距離就可以確定下來。先以 UVa 423 - MPI Maelstrom 為例看一下堆優(yōu)化 Dijkstra 的代碼實現(xiàn)題目給定由 n 個處理器組成的網(wǎng)絡(luò)拓?fù)溥厵?quán)代表相鄰處理器之間的通信耗時。一個處理器收到消息之后可以立即向所有與它直接相連的處理器發(fā)送消息并且多個處理器可以同時發(fā)送。因此消息最早到達(dá)處理器i的時間就是從處理器1到i的最短距離等到所有處理器都收到消息時花費的總時間就是這些最短距離中的最大值。輸入格式第一行輸入整數(shù) n處理器數(shù)量滿足 1 ≤ n ≤ 100。后續(xù)輸入描述一個 n × n 的鄰接矩陣 A其中 A(i,j) 代表從處理器 i 直接向處理器 j 發(fā)送消息的通信開銷若輸入為字符x則表示二者之間沒有直接連接。節(jié)點向自身發(fā)送消息不需要網(wǎng)絡(luò)傳輸因此 A(i,i)0。網(wǎng)絡(luò)為無向圖滿足 A(i,j)A(j,i)。輸入僅給出鄰接矩陣嚴(yán)格下三角部分第 2 行1 個數(shù)據(jù) A(2,1)第 3 行2 個數(shù)據(jù) A(3,1), A(3,2)輸出格式從 1 號處理器向所有其他處理器廣播消息所需的最短時間。輸入樣例5 50 30 5 100 20 50 10 x x 10輸出樣例35這一道題目可以采用標(biāo)準(zhǔn) Dijkstra 算法解決。我們用鄰接表存圖用一維數(shù)組記錄處理器1到每個節(jié)點的當(dāng)前最短距離再使用小根優(yōu)先隊列按照距離從小到大擴(kuò)展?fàn)顟B(tài)。最后取dist[1...n]的最大值就是完成廣播所需的最短時間。給出如下的完整代碼#include bits/stdc.h using namespace std; using ll long long; const ll INF numeric_limitsll::max() / 4; using pli pairll, int; struct Edge { int to; long long w; }; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n; cin n; vectorvectorEdge graph(n1); //鄰接表方式存儲圖 for (int i2;in;i) { for (int j1; ji;j) { string value; cinvalue; if (value!x) { ll weight stoll(value); graph[i].push_back({j, weight}); graph[j].push_back({i, weight}); } } } priority_queuepli, vectorpli, greaterpli pq; vectorll dist(n1, INF); dist[1] 0; pq.push({0, 1}); while (!pq.empty()) { auto [distance, u] pq.top(); pq.pop(); if (distance ! dist[u]) continue; for (const auto e : graph[u]) { int v e.to; if (dist[v] distance e.w) { dist[v] distance e.w; pq.push({dist[v], v}); } } } ll ans 0; for (int i1;in;i) ans max(ans, dist[i]); cout ans endl; return 0; }相關(guān)解釋vectorvectorEdge graph(n1);使用鄰接表存圖并采用從 1 開始的節(jié)點編號。graph[i]存放所有從節(jié)點i出發(fā)的邊無向邊需要分別加入兩個方向。有向圖和無向圖都可以使用鄰接表只是加邊方式不同。vectorll dist(n1, INF);則記錄從起點到各節(jié)點當(dāng)前已知的最短距離。priority_queuepli, vectorpli, greaterpli pq;定義了小根優(yōu)先隊列。每個元素的含義是{從起點到當(dāng)前節(jié)點的距離, 當(dāng)前節(jié)點編號}隊列先比較距離距離相同時再比較節(jié)點編號。Dijkstra 真正依賴的是距離較小的狀態(tài)先出隊節(jié)點編號只負(fù)責(zé)在距離相同時確定一個穩(wěn)定的先后順序不會影響最短距離的正確性。for (const auto e : graph[u])遍歷節(jié)點u的所有鄰邊。若distance e.w dist[v]說明經(jīng)過u到達(dá)v更短此時更新dist[v]并把新狀態(tài)加入優(yōu)先隊列。if (distance ! dist[u]) continue;用來跳過過期狀態(tài)。比如隊列中先后出現(xiàn){10,u}和{7,u}當(dāng){10,u}出隊時dist[u]已經(jīng)被更新為 7那么距離 10 的狀態(tài)就沒有繼續(xù)擴(kuò)展的必要。這里不是說節(jié)點u只能處理一次而是只處理與當(dāng)前最優(yōu)記錄一致的狀態(tài)。在絕大多數(shù)稀疏圖中鄰接表加小根優(yōu)先隊列都是最常用也最穩(wěn)妥的實現(xiàn)。采用上面這種允許同一節(jié)點多次入堆、出隊時跳過舊狀態(tài)的寫法時堆中最多可能出現(xiàn) O(E) 個狀態(tài)因此也可以把復(fù)雜度寫成 O((VE)log E)。對于普通簡單圖E ≤ V2所以通常簡寫為 O((VE)log V)??臻g復(fù)雜度為 O(VE)。鄰接表加優(yōu)先隊列屬于堆優(yōu)化 Dijkstra尤其適合邊數(shù)遠(yuǎn)小于 V2 的稀疏圖。為了對照另一種寫法接下來看 POJ 2387 - Til the Cows Come Home。題目給定一個正權(quán)無向圖節(jié)點數(shù)量滿足 2 ≤ V ≤ 1000邊數(shù)量滿足 1 ≤ E ≤ 2000要求節(jié)點 V 到節(jié)點 1 的最短距離。輸入格式第1行兩個整數(shù)E和V即先給定邊數(shù)再給定頂點數(shù)目第2到E1行每行描述一條道路包含三個用空格分隔的整數(shù)。前兩個整數(shù)表示道路連接的地標(biāo)編號第三個整數(shù)表示道路長度范圍1到100輸出格式一個整數(shù)表示貝茜從 V 號地標(biāo)到 1 號地標(biāo)必須行走的最短距離。輸入樣例5 5 1 2 20 2 3 30 3 4 20 4 5 20 1 5 100輸出樣例90完整代碼如下#includebits/stdc.h using namespace std; using ll long long; const ll INF numeric_limitsll::max() / 4; int main() { ios::sync_with_stdio(false); cin.tie(0); int E, V; cin E V; vectorvectorll graph(V1,vectorll(V1,INF)); for (int i0;iV;i) graph[i][i] 0; for (int i0;iE;i) { int u, v, w; cin u v w; graph[u][v] min(graph[u][v],(ll)w); graph[v][u] min(graph[v][u],(ll)w); } vectorll dist(V1,INF); vectorbool used(V1,false); dist[V]0; for (int iter1;iterV;iter){ int u-1; for (int i1;iV;i){ if (!used[i] (u-1 || dist[i]dist[u])){ ui; } } if (u-1||dist[u]INF) break; used[u]true; for (int v1;vV;v){ if (!used[v]graph[u][v] ! INF) { if (dist[u]graph[u][v] dist[v]) dist[v] dist[u] graph[u][v]; } } } cout dist[1] endl; return 0; }這道題目還需要處理重邊。比如輸入之中可能同時存在1 2 20 1 2 15采用鄰接矩陣時同一對節(jié)點之間只需要保留最短的那條邊graph[u][v] min(graph[u][v], (ll)w); graph[v][u] min(graph[v][u], (ll)w);dist[i]的含義仍然是從起點 V 到節(jié)點i當(dāng)前已知的最短距離初始化為INF表示暫時無法到達(dá)。每一輪通過線性掃描找到一個尚未確定、且dist最小的節(jié)點u再用dist[u] graph[u][v]松弛其他節(jié)點。由于邊權(quán)非負(fù)u被選中之后它的最短距離就可以確定下來。上述代碼展示的是 Dijkstra 的樸素實現(xiàn)時間復(fù)雜度為 O(V^2)空間復(fù)雜度也是 O(V^2)。需要說明的是POJ 2387 本身只有至多 2000 條邊實際上屬于稀疏圖使用鄰接表加優(yōu)先隊列會更合適這里只是借它規(guī)模不大的數(shù)據(jù)展示鄰接矩陣版本。當(dāng) E 接近 V^2 時圖才是真正的稠密圖此時鄰接矩陣結(jié)合線性掃描往往更直接也可能比頻繁維護(hù)堆更快。選擇實現(xiàn)方式時應(yīng)該先看 E 與 V^2 的關(guān)系而不是默認(rèn)某一種寫法永遠(yuǎn)更優(yōu)。二、A* 算法和第 K 短路徑在標(biāo)準(zhǔn) Dijkstra 算法之中dist數(shù)組只為每個節(jié)點保留一個最優(yōu)值。但是如果我們需要找的不是最短路徑而是第 K 短路徑這時候應(yīng)該如何處理呢一個直接的想法是不再讓每個節(jié)點只出隊一次而是統(tǒng)計它第幾次從優(yōu)先隊列中取出。對于正權(quán)圖第 1 次取出節(jié)點u對應(yīng)到達(dá)u的最短路徑第 2 次對應(yīng)第二短依次類推。這個方法能夠求允許重復(fù)經(jīng)過節(jié)點和邊的第 K 短路但如果直接按照已經(jīng)走過的距離擴(kuò)展優(yōu)先隊列中會出現(xiàn)大量最終到不了終點、或者明顯偏離終點的狀態(tài)。A* 的作用就是利用“距離終點還剩多遠(yuǎn)”來調(diào)整擴(kuò)展順序盡量少搜索無關(guān)區(qū)域。下面以 POJ 2449 - Remmarguts Date 為例。題目大意是在有向正權(quán)圖中求從起點 S 到終點 T 的第 K 短路徑長度。路徑允許重復(fù)經(jīng)過節(jié)點和邊長度相同但經(jīng)過方式不同的路徑也分別計數(shù)如果不存在第 K 短路徑則輸出-1。輸入格式第一行包含兩個整數(shù)N和M1 ≤ N ≤ 10000 ≤ M ≤ 1000000。站點編號從1到N。隨后M行每行包含三個整數(shù)A、B和T1 ≤ A,B ≤ N1 ≤ T ≤ 100表示存在一條從A站點到B站點的單向小路耗時為T。最后一行包含三個整數(shù)S、T和K1 ≤ S,T ≤ N1 ≤ K ≤ 1000。輸出格式單獨一行輸出一個整數(shù)表示第 K 短路徑的長度不存在則輸出-1。輸入樣例4 5 1 2 2 1 3 5 2 4 3 3 4 1 2 3 1 1 4 3輸出樣例6這里可以引出 A* 算法。它是一種啟發(fā)式最短路徑搜索算法核心思想是在 Dijkstra 的基礎(chǔ)上再給每一個狀態(tài)加上“從當(dāng)前節(jié)點到終點還需要多少代價”的估計。標(biāo)準(zhǔn) Dijkstra 只按照起點到當(dāng)前節(jié)點的距離排序行為就像以起點為圓心不斷向外擴(kuò)散A* 則同時考慮已經(jīng)走了多遠(yuǎn)以及距離目標(biāo)還可能有多遠(yuǎn)因此會優(yōu)先擴(kuò)展更有希望較早到達(dá)終點的狀態(tài)。A* 會給每個待搜索狀態(tài)計算評價函數(shù)f(n) g(n) h(n)。其中g(shù)(n)表示從起點 S 到節(jié)點 n 已經(jīng)付出的實際代價h(n)表示從節(jié)點 n 到終點 T 的估計代價搜索時優(yōu)先取出f(n)更小的狀態(tài)。值得注意的是標(biāo)準(zhǔn) Dijkstra 可以看成h(n)0的特殊情況。為了保證搜索順序的正確性啟發(fā)函數(shù)通常要求不能高估真實距離并且在滿足此條件下啟發(fā)函數(shù)越接近真實值A(chǔ)*算法搜索效率和正確率也就越高擴(kuò)展的無效節(jié)點也就越少。也就是需要滿足以下兩個條件可容許性對任意節(jié)點nh(n)不能大于從n到終點的真實最短距離。即h(n) ≤ d(n,target)其中d(n, target)是節(jié)點n到終點的真實最短距離。這是為了保證A*找到的是真正的最短路徑。一致性對于任意邊W(a,b)滿足h(a) \leq w(a,b) h(b)其中w(a,b)是a 到b的權(quán)值。這是可容許行更強(qiáng)的條件。而在這道題中我們直接在反圖上從終點執(zhí)行一次 Dijkstra得到原圖中每個節(jié)點到終點的真實最短距離。也就是說這里的h(n)不是大概估計而是一個精確的啟發(fā)函數(shù)。為什么要建反圖原圖中的邊是u - v反圖中就存成v - u。從終點 T 在反圖上運行 Dijkstra得到的h[u]恰好就是原圖中從u到 T 的最短距離。若h[u]為無窮大說明從u根本無法到達(dá)終點這類狀態(tài)可以直接剪掉。#include functional #include iostream #include limits #include queue #include vector using namespace std; using ll long long; using pli pairll, int; const ll INF numeric_limitsll::max() / 4; struct Edge { int to; int weight; }; struct State { int node; ll g; ll f; bool operator(const State other) const { if (f ! other.f) return f other.f; return g other.g; } }; ? int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n, m; cin n m; vectorvectorEdge graph(n 1); vectorvectorEdge reverseGraph(n 1); for (int i 0; i m; i) { int a, b, cost; cin a b cost; graph[a].push_back({b, cost}); reverseGraph[b].push_back({a, cost}); } int start, target, k; cin start target k; vectorll h(n 1, INF); priority_queuepli, vectorpli, greaterpli dijkstraQueue; ? h[target] 0; dijkstraQueue.push({0, target}); ? while (!dijkstraQueue.empty()) { auto [distance, u] dijkstraQueue.top(); dijkstraQueue.pop(); ? if (distance ! h[u]) continue; ? for (const Edge edge : reverseGraph[u]) { int v edge.to; ll newDistance distance edge.weight; ? if (newDistance h[v]) { h[v] newDistance; dijkstraQueue.push({newDistance, v}); } } } ? if (h[start] INF) { cout -1 \n; return 0; } if (start target) k; ? priority_queueState, vectorState, greaterState open; vectorint popCount(n 1, 0); ? open.push({start, 0, h[start]}); ? while (!open.empty()) { State current open.top(); open.pop(); ? int u current.node; popCount[u]; ? if (u target popCount[u] k) { cout current.g \n; return 0; } ? if (popCount[u] k) continue; ? for (const Edge edge : graph[u]) { int v edge.to; if (h[v] INF || popCount[v] k) continue; ? ll newG current.g edge.weight; open.push({v, newG, newG h[v]}); } } ? cout -1 \n; return 0; }結(jié)構(gòu)體State表示優(yōu)先隊列中的一個搜索狀態(tài)把當(dāng)前節(jié)點node、已經(jīng)走過的實際距離g、預(yù)計經(jīng)過終點時的總距離fgh放在一起。重載之后小根堆會優(yōu)先取出f較小的狀態(tài)若f相同再優(yōu)先取出g較小的狀態(tài)。建圖時同時保存原圖和反圖。反向 Dijkstra 得到的h[i]表示原圖中從節(jié)點i到終點的真實最短距離。它不僅給 A* 提供搜索方向也可以提前過濾h[v] INF的節(jié)點因為這些節(jié)點無論如何都無法走到終點。popCount[u]記錄節(jié)點u已經(jīng)有效出隊多少次。與標(biāo)準(zhǔn) Dijkstra 不同這里不能在第一次取出u后就永遠(yuǎn)丟掉其他到達(dá)方式因為第 2 次、第 3 次到達(dá)u的路徑仍然可能組成最終答案。由于邊權(quán)為正優(yōu)先隊列按照f擴(kuò)展而終點處滿足h[target]0所以終點第 K 次出隊時對應(yīng)的g就是第 K 短路徑長度。open是 A* 的候選狀態(tài)隊列。每次取出f最小的狀態(tài)遍歷它的出邊再把新的候選放回隊列。它保存的是一條條路徑狀態(tài)而不是每個節(jié)點唯一的最短距離所以同一個節(jié)點可以在隊列中出現(xiàn)多次真正限制有效擴(kuò)展次數(shù)的是popCount。如果start target初始狀態(tài){start, 0, h[start]}會先把長度為 0 的空路徑算作一次到達(dá)。但原題要求的是實際經(jīng)過邊的路徑所以代碼中需要先執(zhí)行k把空路徑跳過去。這里用反向 Dijkstra 求出的h[i]是精確最短距離不是估計值。它同時滿足可容許性和一致性因此 A* 不僅能保證找到第 K 短路而且每個狀態(tài)第一次出隊時就是該節(jié)點在當(dāng)前 g 下的最優(yōu)擴(kuò)展順序。如果換成一個粗糙的估計函數(shù)雖然也可能正確但搜索效率會明顯下降。這里求的是允許重復(fù)節(jié)點和邊的第 K 短“游走”只是競賽題中通常仍然簡稱為第 K 短路。不同路徑即使長度相同也要分別計數(shù)所以優(yōu)先隊列中的重復(fù)狀態(tài)不能簡單去重。反向 Dijkstra 的復(fù)雜度為 O((NM)\log N)A* 階段中每個節(jié)點最多有效擴(kuò)展 K 次粗略上界可以寫成 O(KM\log(KM))。啟發(fā)函數(shù)主要減少實際擴(kuò)展的無關(guān)狀態(tài)但不會改變這里給出的最壞復(fù)雜度上界。三、Yen 算法思想和第 K 短簡單路徑上一道題允許重復(fù)經(jīng)過節(jié)點和邊因此同一個節(jié)點可以被多次擴(kuò)展。但是如果題目要求路徑中不能重復(fù)經(jīng)過節(jié)點這種“統(tǒng)計終點第幾次出隊”的方法就不能直接使用了。下面介紹 UVa 1685 - Enjoyable Commutation這道題要求的正是第 K 短簡單路徑。題目給定一個帶正權(quán)的有向圖需要求從起點 a 到終點 b 的第 K 短路徑滿足一條路徑不能重復(fù)經(jīng)過同一個節(jié)點也就是必須是簡單路徑先按照路徑總長度從小到大排序如果兩條路徑長度相同再按照節(jié)點序列的字典序排序如果不足 K 條路徑輸出None否則用連字符輸出第 K 條路徑經(jīng)過的節(jié)點。每組數(shù)據(jù)的第一行包含n m k a b其中 2 \leq n \leq 501 \leq k \leq 200。接下來的 m 行每行給出一條有向邊x y d。題目保證不存在自環(huán)同一對有序節(jié)點之間也不會出現(xiàn)重邊。輸入以五個 0 結(jié)束。輸入樣例5 20 10 1 5 1 2 1 1 3 2 1 4 1 1 5 3 2 1 1 2 3 1 2 4 2 2 5 2 3 1 1 3 2 2 3 4 1 3 5 1 4 1 1 4 2 1 4 3 1 4 5 2 5 1 1 5 2 1 5 3 1 5 4 1 4 6 1 1 4 2 4 2 1 3 2 1 2 1 1 4 3 2 3 1 3 4 1 3 3 5 1 3 1 2 1 2 3 1 1 3 1 0 0 0 0 0輸出樣例1-2-4-3-5 1-2-3-4 None這道題可以采用 Yen 算法解決。Yen 算法先求出第一短的簡單路徑然后依次構(gòu)造第二短、第三短直到得到第 K 短。假設(shè)當(dāng)前已經(jīng)確定的一條路徑為1 - 2 - 4 - 6任何一條與它不同的新路徑都一定存在一個“第一次發(fā)生偏離的位置”。這個位置可能在節(jié)點 1、節(jié)點 2也可能在節(jié)點 4。于是我們可以依次把這些節(jié)點當(dāng)作偏離點將整條路徑拆成兩部分完整路徑 rootPath spurPath其中rootPath是從起點到偏離點的公共前綴spurPath是從偏離點重新走向終點的后半段。為了讓新路徑既不同于已有答案又仍然是簡單路徑需要做兩類限制禁止rootPath中偏離點之前的所有節(jié)點防止后半段繞回前綴并重復(fù)經(jīng)過節(jié)點對所有與當(dāng)前rootPath前綴相同的已有答案禁止它們在偏離點之后使用的那條邊防止重新生成已經(jīng)確定的路徑。每個偏離點都可能產(chǎn)生一條候選路徑這些候選不能在本輪結(jié)束后丟掉因為第一條路徑產(chǎn)生的某個候選也可能直到第五輪才成為最優(yōu)答案。所以代碼使用一個全局候選集合candidates按照“總長度、節(jié)點序列字典序”排序。每一輪從中取出最小者作為下一條正式答案。還需要解決一個子問題在刪除部分節(jié)點和邊之后如何找到長度最短、且字典序最小的路徑這里先在反圖上從終點執(zhí)行 Dijkstra得到dist[u]表示節(jié)點u到終點的最短距離。然后從起點正向恢復(fù)路徑每一步在所有滿足dist[u] w(u,v) dist[v]的鄰邊中選擇終點編號最小的一個。距離條件保證最終仍然是最短路徑鄰接點從小到大選擇則保證節(jié)點序列的字典序最小。完整代碼如下#include bits/stdc.h using namespace std; ? using ll long long; const ll INF (1LL 62); ? struct Edge { int to; int w; }; ? struct Path { ll dist; // 路徑總長度 vectorint nodes; // 路徑上的節(jié)點序列 }; ? struct PathCmp { bool operator()(const Path a, const Path b) const { if (a.dist ! b.dist) return a.dist b.dist; return a.nodes b.nodes; } }; ? int n, m, K, startNode, goalNode; vectorvectorEdge graphAdj, reverseAdj; vectorvectorint weightEdge; ? bool shortestPath( int source, int target, const vectorchar bannedNode, const setpairint, int bannedEdge, Path result ) { if (bannedNode[source] || bannedNode[target]) return false; ? vectorll dist(n 1, INF); priority_queuepairll, int, vectorpairll, int, greaterpairll, int pq; ? dist[target] 0; pq.push({0, target}); ? while (!pq.empty()) { auto [currentDist, v] pq.top(); pq.pop(); ? if (currentDist ! dist[v]) continue; ? // 反圖中的 v - u 對應(yīng)原圖中的 u - v。 for (const Edge e : reverseAdj[v]) { int u e.to; ? if (bannedNode[u] || bannedNode[v]) continue; if (bannedEdge.count({u, v})) continue; ? ll newDist currentDist e.w; if (newDist dist[u]) { dist[u] newDist; pq.push({newDist, u}); } } } ? if (dist[source] INF) return false; vectorint nodes; nodes.push_back(source); ? int current source; while (current ! target) { int nextNode -1; ? // graphAdj[current] 已經(jīng)按終點編號升序排列。 for (const Edge e : graphAdj[current]) { int v e.to; ? if (bannedNode[v]) continue; if (bannedEdge.count({current, v})) continue; if (dist[v] INF) continue; ? if (dist[current] (ll)e.w dist[v]) { nextNode v; break; } } ? if (nextNode -1) return false; ? nodes.push_back(nextNode); current nextNode; } ? result.dist dist[source]; result.nodes move(nodes); return true; } ? int main() { ios::sync_with_stdio(false); cin.tie(nullptr); ? while (cin n m K startNode goalNode) { if (n 0 m 0 K 0 startNode 0 goalNode 0) { break; } ? graphAdj.assign(n 1, {}); reverseAdj.assign(n 1, {}); weightEdge.assign(n 1, vectorint(n 1, -1)); ? for (int i 0; i m; i) { int x, y, d; cin x y d; ? graphAdj[x].push_back({y, d}); reverseAdj[y].push_back({x, d}); weightEdge[x][y] d; } for (int u 1; u n; u) { sort(graphAdj[u].begin(), graphAdj[u].end(), [](const Edge a, const Edge b) { return a.to b.to; }); } ? vectorchar noBannedNode(n 1, false); setpairint, int noBannedEdge; ? Path firstPath; if (!shortestPath(startNode, goalNode, noBannedNode, noBannedEdge, firstPath)) { cout None\n; continue; } ? vectorPath answers; answers.push_back(firstPath); ? // candidates 自動按照題目要求排序并且自動去重。 setPath, PathCmp candidates; ? // 額外記錄已成為答案的節(jié)點序列防止極端情況下重復(fù)加入。 setvectorint acceptedPaths; acceptedPaths.insert(firstPath.nodes); ? while ((int)answers.size() K) { const Path previousPath answers.back(); int pathSize (int)previousPath.nodes.size(); ? // rootCost 表示從起點到當(dāng)前偏離點的前綴長度。 ll rootCost 0; ? for (int spurIndex 0; spurIndex 1 pathSize; spurIndex) { int spurNode previousPath.nodes[spurIndex]; ? // 當(dāng)前根路徑為 previousPath[0 ... spurIndex]。 vectorint rootPath( previousPath.nodes.begin(), previousPath.nodes.begin() spurIndex 1 ); ? // 禁止根路徑中除 spurNode 外的節(jié)點保證最終路徑不重復(fù)訪問節(jié)點。 vectorchar bannedNode(n 1, false); for (int i 0; i spurIndex; i) { bannedNode[rootPath[i]] true; } setpairint, int bannedEdge; ? for (const Path path : answers) { if ((int)path.nodes.size() spurIndex) continue; ? bool samePrefix true; for (int i 0; i spurIndex; i) { if (path.nodes[i] ! rootPath[i]) { samePrefix false; break; } } ? if (samePrefix spurIndex 1 (int)path.nodes.size()) { bannedEdge.insert({ path.nodes[spurIndex], path.nodes[spurIndex 1] }); } } ? Path spurPath; if (shortestPath(spurNode, goalNode, bannedNode, bannedEdge, spurPath)) { vectorint totalNodes rootPath; ? // spurPath 的第一個節(jié)點就是 spurNode避免重復(fù)加入。 totalNodes.insert(totalNodes.end(), spurPath.nodes.begin() 1, spurPath.nodes.end()); ? Path totalPath; totalPath.dist rootCost spurPath.dist; totalPath.nodes move(totalNodes); ? if (!acceptedPaths.count(totalPath.nodes)) { candidates.insert(move(totalPath)); } } ? int u previousPath.nodes[spurIndex]; int v previousPath.nodes[spurIndex 1]; rootCost weightEdge[u][v]; } ? if (candidates.empty()) break; ? auto it candidates.begin(); Path nextPath *it; candidates.erase(it); ? acceptedPaths.insert(nextPath.nodes); answers.push_back(move(nextPath)); } ? if ((int)answers.size() K) { cout None\n; } else { const vectorint result answers[K - 1].nodes; for (int i 0; i (int)result.size(); i) { if (i 0) cout -; cout result[i]; } cout \n; } } ? return 0; }代碼中有幾個地方需要重點理解answers保存已經(jīng)正式確定的路徑candidates保存所有尚未被選中的候選路徑。candidates定義在外層循環(huán)之外因此以前產(chǎn)生但暫時沒有入選的路徑會一直保留這正是 Yen 算法不能缺少的候選池。bannedNode只禁止根路徑中spurNode之前的節(jié)點不禁止偏離點本身。否則無法從偏離點出發(fā)尋找新的后綴如果完全不禁前綴節(jié)點新后綴又可能繞回前面生成帶重復(fù)節(jié)點的路徑。bannedEdge需要檢查所有已經(jīng)進(jìn)入answers的路徑。只禁止上一條答案使用的邊是不夠的否則可能重新生成更早已經(jīng)出現(xiàn)過的路徑。shortestPath每次都在當(dāng)前的禁點、禁邊條件下重新求最短路。由于原題邊權(quán)嚴(yán)格為正根據(jù)dist恢復(fù)路徑時不會陷入零權(quán)環(huán)同時題目保證同一對有序節(jié)點之間至多一條邊所以可以直接使用(u,v)表示一條被禁用的邊并使用weightEdge[u][v]計算前綴長度。Yen 算法正確性的關(guān)鍵就在“第一次偏離”上。任意一條尚未進(jìn)入答案集合的簡單路徑與某一條已有路徑相比都可以找到第一個不同的邊。枚舉已有路徑上的每個偏離點就不會漏掉它可能對應(yīng)的候選而每次從全局候選池中取出排序最小的路徑又保證了新加入answers的確實是下一條路徑。一次shortestPath主要執(zhí)行一次堆優(yōu)化 Dijkstra復(fù)雜度約為 O((NM)\log N)。一條簡單路徑最多包含 N 個節(jié)點生成一條新答案時最多調(diào)用 O(N) 次最短路所以核心復(fù)雜度可以粗略寫成 O(KN(NM)\log N)。當(dāng)前代碼為了判斷相同前綴還會直接掃描已有答案最壞會額外產(chǎn)生 O(K^2N^2) 的前綴比較候選路徑本身最多占用 O(KN^2) 的空間。在本題 N \leq 50、K \leq 200 的范圍內(nèi)這樣的寫法更直觀也足以應(yīng)對數(shù)據(jù)范圍。四、另一種 K 短路允許重復(fù)經(jīng)過節(jié)點并帶有等待約束第二部分的 POJ 2449 已經(jīng)允許重復(fù)經(jīng)過節(jié)點和邊這一部分真正增加的難點不是“允許重復(fù)”而是邊的代價會隨到達(dá)時間發(fā)生變化。下面以 UVa 1684 - Escape Plan 為例。題目中有 N 個星球編號為 0 到 N-1其中 0 是起點N-1 是終點。星球之間存在單向的超空間隧道每條隧道由四個整數(shù)U V C W描述隧道從U指向V通過隧道需要花費W秒隧道只會在時間 0,C,2C,3C,\dots 開放在任意一個星球上連續(xù)等待的時間不能超過T秒。有 K 艘帝國殲星艦會沿著較短的路線追擊因此需要求從 0 到 N-1 的第 K1 短路徑。路徑允許重復(fù)經(jīng)過節(jié)點和邊花費時間相同的不同走法也要分別計數(shù)。如果不存在這樣的路徑輸出-1。每組數(shù)據(jù)第一行包含N M K T滿足 1 \leq N \leq 1000 \leq M \leq 5000 \leq K \leq 90 \leq T \leq 100。每條邊的周期滿足 1 \leq C \leq 10通過隧道的時間滿足 1 \leq W \leq 10^6。輸入以四個 0 結(jié)束。輸入樣例5 9 2 2 1 2 5 5 2 4 6 6 0 2 1 8 1 4 4 3 3 0 1 8 1 3 5 10 0 4 4 4 2 3 3 4 3 1 5 10 10 0 0 0 0 0 0 0輸出樣例Case 1: 28 Case 2: -1如果仍然只把“當(dāng)前位于哪個節(jié)點”作為狀態(tài)就會丟失必要的信息。比如同樣到達(dá)節(jié)點u到達(dá)時間分別為 8 和 9面對一條每 3 秒開放一次的隧道接下來需要等待的時間并不相同。因此這里需要把狀態(tài)寫成(node, phase)其中phase是當(dāng)前總時間對所有隧道周期最小公倍數(shù)的余數(shù)。因為 1 \leq C \leq 10所有周期的最小公倍數(shù)最多為lcm(1,2,...,10) 2520只要兩個到達(dá)時間模period相同它們面對每一條隧道時的開放情況就完全相同。這樣一來原本隨絕對時間變化的問題就被展開成了至多 N \times 2520 個有限狀態(tài)。假設(shè)當(dāng)前時間對周期的余數(shù)為phase準(zhǔn)備經(jīng)過周期為cycle的邊。距離最近一次可出發(fā)時間還需要等待int firstWait (cycle - phase % cycle) % cycle;但是不能只考慮最近的一次開放。如果firstWait cycle、firstWait 2 * cycle仍然不超過T主動多等一段時間也是合法選擇并且可能影響后續(xù)邊的開放時刻。所以代碼需要枚舉firstWait, firstWait cycle, firstWait 2 * cycle, ... T下面按照“完整行程”計數(shù)一次行程不只包含經(jīng)過的隧道也包含每次等待之后選擇的出發(fā)時刻。因此即使經(jīng)過的節(jié)點序列相同只要等待安排不同產(chǎn)生的狀態(tài)轉(zhuǎn)移序列也不同代碼會把它們分別保留。這個口徑也解釋了為什么不能只為一條邊保留最近的開放時刻如果只按邊序列區(qū)分路徑則還需要另外去重。在展開后的狀態(tài)圖上所有轉(zhuǎn)移代價都是wait cost并且嚴(yán)格大于 0因此仍然可以使用類似 Dijkstra 的小根堆。used[u][p]不表示這個狀態(tài)是否訪問過而是記錄狀態(tài)(u,p)已經(jīng)第幾次有效出隊。相同狀態(tài)最多擴(kuò)展 K1 次如果它已經(jīng)有 K1 種耗時不大于當(dāng)前方案的到達(dá)方式那么后面的任意一段走法都可以分別接在這 K1 個前綴之后當(dāng)前方案不可能再影響終點的前 K1 個答案。當(dāng)終點第 K1 次出隊時當(dāng)前總時間就是答案。代碼還在反圖上做了一次普通 BFS提前標(biāo)記哪些節(jié)點在拓?fù)渖夏軌虻竭_(dá)終點不能到達(dá)終點的分支無需進(jìn)入優(yōu)先隊列。完整代碼如下#include bits/stdc.h using namespace std; ? typedef long long ll; ? struct Edge { int to; int cycle; int cost; }; struct State { ll dist; // 從 0 號星球出發(fā)所用的總時間 int node; // 當(dāng)前星球 int phase; // 當(dāng)前時間模所有周期的最小公倍數(shù) ? bool operator(const State other) const { if (dist ! other.dist) return dist other.dist; if (node ! other.node) return node other.node; return phase other.phase; } }; ? int gcd_int(int a, int b) { while (b ! 0) { int r a % b; a b; b r; } return a; } ? int main() { ios::sync_with_stdio(false); cin.tie(NULL); ? int N, M, K, T; int caseNo 1; ? while (cin N M K T) { if (N 0 M 0 K 0 T 0) { break; } ? vectorvectorEdge graph(N); vectorvectorint reverseGraph(N); int period 1; ? for (int i 0; i M; i) { int u, v, c, w; cin u v c w; ? graph[u].push_back(Edge{v, c, w}); reverseGraph[v].push_back(u); ? period period / gcd_int(period, c) * c; } ? vectorbool canReachTarget(N, false); queueint q; ? const int target N - 1; canReachTarget[target] true; q.push(target); ? while (!q.empty()) { int u q.front(); q.pop(); ? for (size_t i 0; i reverseGraph[u].size(); i) { int v reverseGraph[u][i]; if (!canReachTarget[v]) { canReachTarget[v] true; q.push(v); } } } ? const int need K 1; ll answer -1; ? if (canReachTarget[0]) { // used[u][p]狀態(tài) (u,p) 已經(jīng)從優(yōu)先隊列中彈出的次數(shù) vectorvectorint used(N, vectorint(period, 0)); ? priority_queueState, vectorState, greaterState pq; pq.push(State{0, 0, 0}); ? int reachedTarget 0; ? while (!pq.empty()) { State cur pq.top(); pq.pop(); // 前 need 次以后到達(dá)同一狀態(tài)的路徑不可能影響答案 if (used[cur.node][cur.phase] need) { continue; } used[cur.node][cur.phase]; ? if (cur.node target) { reachedTarget; ? if (reachedTarget need) { answer cur.dist; break; } } ? for (size_t i 0; i graph[cur.node].size(); i) { const Edge e graph[cur.node][i]; ? if (!canReachTarget[e.to]) { continue; } ? int rem cur.phase % e.cycle; int firstWait (e.cycle - rem) % e.cycle; for (int wait firstWait; wait T; wait e.cycle) { ? ll nextDist cur.dist wait e.cost; int nextPhase (cur.phase wait e.cost) % period; ? if (used[e.to][nextPhase] need) { pq.push(State{nextDist, e.to, nextPhase}); } } } } } ? cout Case caseNo : answer \n; } ? return 0; }這份代碼之中需要注意下面幾個細(xì)節(jié)period period / gcd_int(period, c) * c逐步計算所有隧道周期的最小公倍數(shù)。因為每個c都不超過 10所以period最大只有 2520不會出現(xiàn)狀態(tài)數(shù)量無限增長的問題。nextPhase可以直接通過(cur.phase wait e.cost) % period計算。雖然cur.phase不是完整的絕對時間但是所有邊的周期都整除period因此保留這個余數(shù)已經(jīng)足夠決定后續(xù)所有等待時間。used[u][p]必須在狀態(tài)出隊時增加而不是在入隊時增加。優(yōu)先隊列保證出隊順序按照總時間遞增若在入隊時就計數(shù)后加入但距離更短的合法狀態(tài)可能會被過早剪掉。優(yōu)先隊列中可能存在dist、node、phase完全相同的多個狀態(tài)這里不能像普通最短路那樣去重。它們可能由不同的路徑或者不同的隧道產(chǎn)生而題目要求這些走法分別計數(shù)。canReachTarget只根據(jù)圖的連通關(guān)系進(jìn)行剪枝。它為false時一定無法到達(dá)終點為true只表示拓?fù)渖洗嬖诼窂讲⒉槐WC在等待上限之內(nèi)一定可行真正的時間約束仍然要在狀態(tài)轉(zhuǎn)移時判斷。題目給的是追兵數(shù)量 K要求的是第 K1 短路徑所以代碼使用need K 1。這一點和第二、三部分直接輸入“第 K 條”并不一樣。單條隧道的通過時間可達(dá) 10^6路徑又允許繞環(huán)所以總時間使用long long存儲。令 L 為所有周期的最小公倍數(shù)RK1。對于一條周期為 C_e 的邊在一個時間相位下最多產(chǎn)生 \lfloor T/C_e\rfloor1 種等待方案。如果把展開圖的邊數(shù)記為令 L 為所有周期的最小公倍數(shù)RK1。對于一條周期為 Ce 的邊在一個時間相位下最多產(chǎn)生 ?T/Ce?1 種等待方案。如果把展開圖的邊數(shù)記為/ppE ≤ L·Σsube∈E/sub(?T/Csube/sub?1)/pp那么多次出隊 Dijkstra 的時間復(fù)雜度可以寫成 O(RE·log(RE))。used數(shù)組的空間復(fù)雜度為 O(NL)如果把優(yōu)先隊列中的狀態(tài)也計算在內(nèi)最壞空間可以寫成 O(NLRE)。代碼在狀態(tài)出隊時現(xiàn)場枚舉轉(zhuǎn)移因此不需要顯式建出整張展開圖。這個上界比較松實際產(chǎn)生的候選狀態(tài)數(shù)量仍然取決于圖的結(jié)構(gòu)。五、總結(jié)最后把本文幾種容易混淆的模型放在一起比較問題類型路徑是否允許重復(fù)節(jié)點狀態(tài)中需要保留什么適合的做法單源最短路不作限制最短解可取簡單路徑當(dāng)前節(jié)點Dijkstra第 K 短游走允許當(dāng)前節(jié)點、到達(dá)次數(shù)反向 Dijkstra 計算啟發(fā)函數(shù)再用 A* 多次擴(kuò)展第 K 短簡單路徑不允許完整路徑前綴與偏離位置Yen 算法 受限最短路帶周期等待的第 K 短游走允許當(dāng)前節(jié)點、時間相位、到達(dá)次數(shù)狀態(tài)展開 多次出隊的 Dijkstra所以遇到“第 K 短路”時第一件事不是直接套模板而是先確認(rèn)題目中的“路徑”到底是什么能不能重復(fù)經(jīng)過節(jié)點和邊相同長度的不同走法是否分別計數(shù)邊權(quán)是否會隨狀態(tài)或時間變化。把這幾個問題區(qū)分清楚之后應(yīng)該使用 A*、Yen還是狀態(tài)展開通常也就比較明確了。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
神马福利久草| 久久97超碰香蕉| 人妻在线臀日韩| 免费家庭乱伦视频| 岛国黄| 欧美 传媒 麻豆 日韩 偷拍| 东京热一区二区中文字幕| 欧美视频在线第3页| 久久二| 91欧美偷拍| 青青免费在线视频一区 | 99超碰色| 国内三级自拍小视频在线观看| 黑人粗大V S日韩女优视频| 久久久精品视频免费观看| 天天综合站| 激情99| 九九九久久久| 99蜜月精品久久| 草B在线| 亚洲AV无码乱码| 国产视频第二页| 亚州操逼网| 操久久久久| 人妻天天爽夜夜爽爽| 亚洲日韩av专区无码| 成人热久久精品| 免费啪啪一级视频| 日本一区二区不卡| A级国产欧美激情在线| 精品9区| 综合啪啪| 亚洲国产麻豆一区二区三区| 欧美色女人| 97日视频| 岛国不卡超碰护士AV在线播放| 超碰超碰95| 国产日本熟女顶级一区二区三区视频| 毛片17S| 78p欧美| 天天日日日射| 精品乱子一区二区三区99| 日韩亚洲美女一区久久| 日韩专区数据列表-第3230页-精品国产一区二区三区香蕉 久久99熟女人妻中文字 | 亚洲精品欧美专业| 亚洲av淫乱| 日韩精品在线观看观看| 中文字幕后石码四区五区| 成熟熟女国产精品一区二区| 超碰久在线天天做| 亚洲视频,小说| 午夜精品久久久久久久男人的天堂| 欧美一区二区三区互相| 无码高清操逼网址| 乱伦a片视频| 日本不卡高清视频| 99综合视频一体| 国产一级作爱毛片| 97人妻碰碰中文无码久热丝袜| 中国少妇XXXX做受| 色色色网站| 国产色精品午夜大片| 中文字幕 国产区| 精品成人动漫一区二区| 深田咏美亚洲精品福利社| 黄色操人| 婷婷久久综合久| 国产美脚女优尤物在线观看| 亚洲欧洲无码一区夜| 91在线美女| 日本一片一区| 欧美偷拍| 亚洲阿v天堂在线| 91bbbbbb| 一级免费啪啪片| 欧美|91色综合| 加勒比综合九九99视频在线播放| 热热色综合网| 欧美AB在线| 天天综合97| 九九综合久久中文字幕| 91久久婷婷| 亚洲精品天天影视综合网| 一区二区播放| 美国精品国产精品| 国产高清成人传媒影视| 999久久久久久久精| 亚州成人a∨| 欧美亚洲激情一二三| 欧美性性性| 探花一区二区三| 久久婷婷一区二| 国产外初女出血视频| 国产精品一区二区麻豆| 欧美熟妇色| 亚洲电影中字一区二区| 亚洲综合97中文网| 大香蕉一人| 极品综合| 欧美A√综合网| 18精品一二区| 国产精品原创巨作?v网站| 日韩中文字幕人妻视频| 韩国一区二区精品亚洲| 午夜福利 成人 91| 激情五月天丁香社区| 91影视亚洲| 欧美一级AAAAAAA| 91校园春色长篇| 97超碰天天爱天天爱| 台湾佬大香蕉| 色婷久久| 9精品久久| 日韩黄片影院| 老熟女熟妇| 亚洲国产97| 丁香久久| 以及麻豆国产入口在线观看免费| 91成人在线| 九九九成人| 高清国产性猛交xxxx乱大交| 18一区二区三区| 东北女人无套内谢视频| 四虎影视在线| 欧美一区二区三区四区综合| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 八戒无码国产午夜福利| 欧美亚洲厕所精品偷拍91| 亚洲精品九九九九九九| 五月天社区| 精品免费囯产一区二区三区| 五月天婷婷色| 精品视频一区二区| 大香樵伊人网| 97啪啪| 蜜桃视频精品一区二区三区| 无码精品久久| jiujiujiujingpin| WWW黄片COM| 色欧美在线| 人妻中文在线| 97亚洲精品| 在线视频五十市| 国产精品一区二区校花| 老熟女综合网| 96免费视频在线| 艹少妇网站| 丰满搜索结果 -第18页- 久久高清无码 | 东京热综合久久一区二区| 91在线页| 老熟妇一区二区三区…| 色欧美在线| 日韩97超碰中文字幕| 88xx成人精品视频| 亚洲91综合| 欧美性爱91| 天天拍天| 91青视频| 婷婷91| 99久久久久久亚洲精品不卡| 国产精品夜夜夜| 天天干天天操天天拍| 一线黄色免费性爱片| 亚洲国产精品久久久久婷婷老年| 9/A片| 99老司机精品视频在线观看| 欧美色老汉| 嗯嗯啊啊亚欧精品| 日韩无码成人电影| 免费的很黄很污的全部视频| 好属操| 亚洲清纯唯美| 久久夜夜夜| 国产精品色色| 动漫爆乳3D奶水一区在线观看| 日韩97| 熟女露脸激情自拍视频| 少妇与黑人高潮在线| 爱我干综合| 亚洲色图欧美色图日韩色图| 欧美91精品国产自产| AV在线播放网址| 久草精品国产蜜臀 | 九九精品网| 2010男人的天堂| 在线观看不卡一区二区三区| 97久久网| 78精品在线| 一二视频神马久久传媒| 综合激情一一91| 欧美色棕合| 91碰碰| 亚洲一区二区三区欧美日韩| 美女裸体无遮挡永久免费观看网站| 蜜桃臀久久| 国产精品一区二区后入| 福利天堂| 婷婷人妻激情| 精品无av| 揉揉揉夜夜| 青青青草原| 精品久久艹| 中文字幕日韩人妻视频一区二区三区交换夫妻| 国产精品亚洲免费| 亚洲欧洲国产综合av| 亚洲精品国产日韩无码AV永久免 | 91xingse| 裸体美女国产免费久久久网站| 久综合国内精品自在自线| 久久久久久久97| 天天影视91看看| 超碰综合97在线| 五月天加勒比啪| 久久99精品九九久久久婷婷| 久久精品成人一区二区三区蜜臀| 夜夜操夜夜高潮夜夜爽国产精品区| 欧美色图下一页| 美日韩在线不卡人妻| 丁香婷婷激情五月天无毒不卡 | 不卡一区视频| 99热这里都是精品| 男人的天堂va在线| 97色碰| 亚洲有码视频二区| 草草影院日本第一页| 久久久久亚洲av综合波多野制衣| a天堂视频| 激情深爱五月天| www.91色综合| 九九九久久久久| 亚洲国内精品成人不卡| 综合色欧美| 久久久久亚洲Av无码专区老牛影视| 亚洲一二三四区| 国产1024在线播放| 亚洲精品毛片在线观看| 亚洲色人妻综合| 亚洲免费97免费| 日本韩国五十路六十路七十路老熟女作爱视频网站 | 在线色资源| 亚洲毛片久久| A级毛片在线看免费| 岛园激情| 嗯嗯嗯不要不要免费视频| 精品999日本| 9美女超碰在线免费观看| 精品999999| 国模不卡| 免费看日产一区二区三区| 国产 日韩 欧美 人妻 熟女 中文 69人妻精品一区二区绯色 | 欧美日韩亚洲天堂网| 国产少妇内射| 一本色道综合久久欧美| 激情综合久久| 大香蕉综合在线| 欧美在线天堂| 一区二区三区激情在线观看| 一本一首道人妻少妇免费久久| 日本97久久| 亚洲码在线中文在线观看| 婷婷中文网| 欧美综合色站| 婷婷五月天激情四射| 福利操逼| 91在线限制级| 久久精品熟妇丰满人妻99| yellow网站免费观看日韩高清无码| 99热9| 少妇精品久久久| 欧美熟妇精品黑人巨大91| 男人高清无码一区二区| 日韩999| 欧美一级专区免费大片| 国产真实子伦对白| 天天爱天天韩国日本牛牛牛牛| 欧美色日本| 久久精品国产亚洲AV清纯| 337p大胆噜噜噜噜噜91Av| 97超碰久| 自拍大香蕉乱插| 97 九色| www熟女乱伦com| 亚洲夜色在线| 欧美不卡五十路| 欧美黑人猛交春色影视大全| 日韩精品人妻一区二区| 精品性爱无码在线播放| 台湾佬中文娱乐网久久久久久久久久com | 求求你操操我| 亚洲伊人a线观看视频| 丝袜狠狠草尤物人妻av91| 97超碰香蕉| 清柠毛片| 亚洲成人ab| 日本日逼视频网| 91亚.色| 久久久久久久亚洲Av无码| 美女高潮视频91| 无码免费在线观看黄色片| 亚洲国产综合久久久性感熟妇| 美女啊啊啊啊pc| 亚洲加勒比| 一区二区三区在线资源| A片A5445444| 中文字幕乱碼在线| jk白丝没脱就开始啪啪| 91精品人妻五十路| 成片免费播放| 久久精品一区二区一8| 极品粉嫩一区二区| 人妻少妇被猛烈进入中| 久久噜| 国产高清成人传媒影视| 欧美一级二级三级| 亚洲最大的黄色电影网站。| 影视综合无码少妇| 久9爱经典视频| 91精品丝袜在线观看| 99精品九九九九九九| 日日夜夜干| 中文一区二区三区影院| 骚女高跟AV在线| 色综合av男人天堂| 亚州男人天堂| 亚洲欧美日韩国产丝袜自拍中文| 国产精品视频精品一二| AV天堂丝袜| 强奸乱伦 亚洲一区| 久久久久久久六六| 精品久久久久,69国产成人精| 亚洲AV无码秘 蜜桃臀国精产品| 欲射影视| 亚洲国产精品久久久久久久久久| 亚欧性爱无码| 久久久亚洲精品中文字幕人妻| 久久久啊啊| 99久久婷婷丁香| 91丰满| 嫩草影院永久在线制服丝袜| 97电影院超碰| 婷婷五月天激情网| 无码 黑人一区二区三区| 屁股久久久久久久久| 婷婷尹人大香蕉免费| 久久精品国产亚洲AV高清演员表| 97国产|免费| silk lablo在线观看一区二区| 欧美很很操视频| 人人操 欧美| 97人人色| 麻豆人妻偷人精品无码视频| 久久国产视频专区一二三| 加勒比在线视频一区二区三区 | 人妻嗯啊啊在线播放| 99国产在线 精品 视频| 中欧人妻丝袜中文字幕| 欧美成人贴图| 精品乱码在线观看| 日韩不卡一二三四| 日韩成人午夜精品久久高潮| 国产av尤物| 黄片www.| 91熟女视频网| 99这里只有精品| 日本高清视频在线观看黄已三辽| 欧美午夜视频| 啊啊啊啊啊啊好湿好爽视频| 97人妻色| 久久久久13| 婷婷六月色开| 欧美性生活综合| 亚洲图片欧洲图片aⅴ| 东京热视频网| 可以免费看黄片的视频| 呦呦影院| 高清国产成人无码| 欧美性爱日韩性爱| 精品一区二区综合熟妇| 一级@啪啪视频| 一级做a爰片性色毛片久久| 天天综合中文字幕 91| 精品高清牛人盗摄一区二区三区中文字幕A片免费在线观看 | 成人免费在线网站| 97欧美日韩综合| 久久久久久久久久久久久久久乱码| 欧美人妻精品一区二区| 综合影视国产无码| 天天做日日爱夜夜爽| 强奸乱伦av电影| 十八禁成人网站在线观看| 9丨亚洲一区二区在线| 久操操AV电影| 亚洲无码久久久久久久| 欧美刺激色黄片免费看| 亚洲欧美成人在线| 久久超碰爱| 日韩精品.久久精品.AV女优.天美传媒| 亚洲高潮少妇| 97免费视频网| 激情四射婷婷六月天| 青青草影视蜜久久| 国产又黄又爽| 亚洲小电影免费涩涩成人在线高清| 久久久久久久伊人精品| 伊人黄色视频免费观看| 久久久婷婷| 热久久91婷婷| 97丝袜亚洲在线播放| 人妻 欧美亚洲| 欧洲久久一二线| 亚洲无码成人精品| 女人被添高潮免费视频| 猛交交| 亚洲熟妇无码一区二区三区| 国产久久久久影院老熟女| 97久久久久久久久久| 丝袜AV一区二区三区| 国产粉嫩蜜臀av一区二区三区| 亚洲AV成人无码一二三久久| 日本中文字幕在线视频| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 97精品综合久久| 蜜色网色哟哟| 日韩丨制服丨中文|在线| 91精品导航| 日日操免费视频| 最新国产精品久久精品| 久久这里精品国产99丫e6| 性在久久久久久| 亚州国产精品乱| 福利一级版子| 国产精品美女| 激情五月婷| 欧美少妇性乱| 偷拍 欧美 日韩| 日韩久久激情精品| 麻豆伊人网| 蜜臀久久99精品久久久久| 乱论91| 欧美天天谢综合网| 91伊人| 柠檬AV导航| 超碰地址97| 3PAV乱伦视频| 国产suv精品一区二区四| 日韩人人精品| 大学生口爆吞精| 偷拍网站久久男女男| 久久久91福利姬| gogogo免费高清看中国国语| 日本久操视频| 天天噜| 99视频内射三四| 久久久九精品| 一级久久性爱视频| 久久亚洲色图中文字幕| 无码丰满熟妇一区二区浪潮AV| AV天天在线观看| 91男女| 亚洲精品中文字幕一区在线视频| 福利天堂| 日本一区二区不卡精品| 91视频综合在线| 国产亚洲精品美女久久久| 嗯嗯啊啊用力视频免费| 九九九九热| 日本超碰在线国产一区| 看黑人AV不卡| 日韩三级在线观看网站| 中文字幕乱碼在线| 国产精品分类在线观看| 69AV女优男人的天堂| 日本506070| 一区二区 韩日AV| 人人妻人人玩人人澡人人爽| 亚洲熟妇乱女区二区三区| 九九碰九九爱97超| xxx亚洲午夜天堂| 亚洲欧美高清无码| 91中文精品日韩欧美在线| 国产一区二区成人av在线播放| 97日本超碰综合| 国产女同在线观看视频| yiren97| 97在线观看播放视频| 九九自拍伦理| 久草视频分类在线| 久久久中文| 色婷婷综合久久中文字幕雪峰 | 精品美女少妇一区二区三区| 色噜噜精品一区二区三| 东北女人性交| 91美腿丝袜在线观看| 五月天久久综合网| julia ann久久| 九九成人| 久操操AV电影| 欧美在线大香999| 日韩精彩免费| 久久av成人无码免费| av天堂加勒比| 久久e6只有精品| 一牛影视成人片免费| 亚洲欧美97√| 久久综合av| 麻豆成人影音在线| 91性高| 久色网| 日韩欧洲操屄视频| 一本一道久久综合久久| 丝袜性亚洲| 激情五月天色色网| 影音先锋乱伦资源| 精精品人妻一区二区三区| 蜜臀AV成人精品蜜臀AV久久| 亚洲综合成人网| 国产第12页| 极品人妻少妇综合| 一本久久精品中文字| 欧美日韩成人| 啪啪资源网| 天天澡天天爽日日AV| 俞拍自拍| 九九热这里只有在线精品视 伊人草 成人菠萝蜜视频在线观看 | av东京热男人的天堂| 色五月大香蕉| 国产高清在线观看欧美| 亚洲av性爱电影| 99视频自拍区| 久久一本大香蕉 | 国产最新AV| 精品一区二区人妖| 超碰无码加勒比| 亚洲图片另类| 伊人宅男大香蕉| 欧美日韩青操| 插老姨肥穴| 久久久久久中文字幕中文字幕最新| 欧美成人一级免费电影| 欲射影视| 婷婷五月天无码 | 96精品久久久| 色阁阁AV综合网| 天堂麻豆天美| 好看的91视频| 性色乱AV一区二区| 九九热精品免费视频| 操99| 一起草AV| 六月婷婷激情| 久久香蕉国产传媒一区剧情天美| 婷婷六月色开| 久久xxxx| 夜夜操狠狠操| 天天插天天插| 亚洲综合小说另类图欧美视频激情小说色五月天 | 精品国产自在在线99| 亚洲激情网一二三四区| 91无人区卡一卡二卡三乱码入口最新版:能让用户有更多选择的选择-经典说说-爱 | 久久人妻视频| 久久黄黄| 色婷婷综合久久久久中文一区二区 | 嗯嗯嗯啊啊啊干死我吧| 亚洲情色综合网| 亚洲人人夜夜澡人人爽| 日日日日做夜夜夜夜做无码97| 操逼无毒无码免费视频| 亚洲精品97p| 综合亚洲欧美| 97国产精品| 色色色日本| 成年人三级黄色片视频| 亚洲国产一级精品毛一级精品看免费视频 | 入口操逼网站| 色婷婷视频| 嗯啊不要啊在线 | 色臀av| 一本色道无码DVD中文字幕| 中文字幕人妻资源在线| 欧美色视频在线| 免费精品福利在线观看| 日韩免费人妻色情网站| 亚州久久9| 啊啊在线| 亚洲无码超碰免费| 日韩黄色一区二区三区| 五月天婷婷欧美三区| 欧美有码亚洲中文字幕一区二区三区四区 | 日韩美女高潮喷水视频| 欧美日韩小说| 第四色奇米影视777| 黄片无码在线制服| 99久久com免费视频′| 97看操| 97精品一区二区视频在线观看| 97免费在线观看视频| 被男人吃奶很爽的毛片| www.色操逼| 亚洲中文字幕乱码无码一区二区 | 18禁的网站在线| 91丝袜美女国产| 亚洲激情色片| 人妻欧美| 女同性恋久久| 亚欧中文字幕在线视频| AV天堂因数| 国产自产自拍| 精品国产嫩穴视频| 好一吊区二区| 色翁荡息又大又硬又粗又爽| 啊啊啊好想要| 国产成人精品日本亚洲语言| 免费9 1久久| 日逼97| 亚洲人妻中文高清| 色综合加勒比四四季| 超碰精品97| 免费看黄视频亚洲网站| 天堂日本亚洲欧美| 大香蕉伊人75| 天美麻花大全视频| 亚洲欧美国产va在线| 亚洲无码com| 超碰国产在线| 亚洲做性| 久久精视频美日韩在线视频| 久久色一区二区| 久久久性| 大香蕉伊人亚洲| 9久久精品| 亚洲欧美激情在线视频| 大屁股国产在线视频| 黄色香蕉视频网站一区| 热久久91婷婷| 白丝av| 亚洲熟妇乱女区二区三区| 天美麻豆一区二区三区| 极品极品色影院| 狠狠干2020| 免费啪啪一级视频| 国产欧洲精品亚洲午夜拍精品| 午夜.DJ高清在线观看免费7| 蜜桃视频一区二区三区在线观看| 亚洲色图欧美色图另类图片| 黑操B| 久久天堂| 日韩精品高清资源在线| 性色AV蜜色av色欲av| 好淫网一二三视区| 亚洲精品一二牛牛| 亚洲射综合网| 免费一级精品啪啪视频| 成人片视频| 三级三级三级a级全黄三| 四虎在线观看网站| 美女黄频a美女大全免费皮| 日韩干B| 99只有精品| 丝袜美腿亚洲| 人人摸人人干| 97人人操人人摸| 久久影视二区三区行押| 欧美日韩999| 国产60页| 97看操| 亚洲乱码国产乱码精网站| 天天干夜夜操一区二区| 成人怡红院| 超碰性爱97| 亚洲系列第一页| 久久久性少妇| WWW4虎| 国产AV久久野战精品| 9九九国产| 天天看天天综合成人网| 370p日韩欧美亚洲精品| chaopen97久久| 日韩女优在线| 欧美性爱中文字幕无线码| 亚洲双插| 日本丝袜美腿人妻九九| 日本高清_区二区三区| 国产精品伦理| 天堂精品小草| 午夜免费福利视频一区| 操一操摸一摸| 九九热午夜欧亚国产视频| 超碰九色| 日韩欧美午夜一区二区| 91综合天天看| 国产av青草| 国产精品三级视频网站| 啪啪视频免费在线观看| 天天大干大香蕉| 日本精品人妻少妇一区二区| 国产一级黄色片在线观看| 97干在线| 久久久久久久久久久精| 蜜臀久久99精品久久久久免费观| 特级丰满少妇一级AAAA爱毛片| 国产女人视频三四五区| 亚洲熟女少妇免费视频| 殴美日韩m| 久碰视频| 免费中文在线| 成人av在线播放| 91亚洲人| 欧美最婬乱婬爆婬牲视频| 岛国人妻少妇av在线观看| 婷婷午夜| 蜜乳AV网址| 人妻偷拍一区二区三区| 一区二区三区高清| 亚欧操逼片在线观看| 国产精品suv一区| 青青草九九九九九| 综合久久99| 国产精品亚洲一区二区三区四区| 亚欧性爱无码| 欧美亚洲国产91在线| 91另类| 亚洲a色| 久久大香蕉97| 国产精品大屁股999| 91天天c| 久久只有精品一区二区三区| 日韩精品.久久精品.AV女优.天美传媒| 天天做日日爱夜夜爽| 一区二区三区黄色片a| 国产精品第一区第一页| 极品销魂美女一区二区 | 国产精品宅男免费| 强奸乱伦大香蕉| 激情五月综合开心五月| 日韩综合无码一区久久92| 久久黄人人爽视频| 亚洲色人阁| 天天干18禁| 九久9精品| 好吊色综合| 欧美亚洲情色| 综合伊人网12色| 三级日本一区二区三区| 五月丁香六月综合缴清无码 | 天天干天天狼在线视频| 日韩欧美俄罗斯A片| 亚洲高清国产理伦片| 麻花传媒免费网站在线观看| 日韩国产乱子伦App| av日韩手机在线影视| 91成人久久| 9 9精品一区二区三区| 少妇内射www在线观看视频| 神马久久久久久久久久| 色超碰综合| 精品人妻视频一区二区在线播放| 蜜桃臀一区二区三区久久| 亚洲在线综合| 人妻少妇精品视频一区二区三区| 欧美天天| 国产成年精品高清在线观看91| 思思热在线cao| 久久久久国产一区二| 激情小说五月天| 四虎影库国产精品免费| 97 九色| 骚日日av| 一区二区乱码福利| 人妻中文字幕精品无码| 国产亚洲禁久一区二区| 欧美成人都市人妻| 亚州人妻| 欧美日韩不卡传媒| 操国产逼| 男女真人网18| 亚洲国产欧美日韩人妻日中文| 91新在线欧美| 怡红院网站在线视频| 亚洲天堂男人的天堂| 九月丁香婷婷色| 久久丁香| 色天欧美| 色欲天天综合久久久无码网中文| 干日本人少妇午夜寂寞影院| 日本在线一二 | 美女啪欧美一区| 狠久久| 91丨豆花丨熟女| 99国产人成精品| 亚洲性综合| 国产精品懂色tv影视免费观看| 天天天天天天天天天天干美女| 国产原创精品| 久久中文字幕人妻熟av女蜜柚| 精品三级在线专区| 婷婷香蕉| 高清不卡 中文 人妻| 美女被啪到深处抽搐视频| 国产精品自在线发布| AV一二区| 国产伦精品| 91free福利| 97频视在线| 97精品国产| 亚洲激情在线| 长久操视频| 精品久久久久久无码| 日韩AV一区二区三区四四| 亚洲欲| 74成人在线| 亚洲情色婷婷五月天| 国产三级中文字幕粉嫩| 性爱Av免费| 天天弄欧美| 蜜臀在线视频| 亚洲欧美大香蕉| 9久9久9久9久视频网站| 芊芊操逼视频无码| 亚洲影院小综合| www国产无码| 九色97| 欧美色图91| 色丁香五月婷婷| 欧美日日人人天天| 艹少妇网站| 亚洲无限观看| 亚洲 日韩 丝袜 熟女 变态| 男人久久精品| 久久透逼视频| 青青草五月天| 成人97人人超碰人人| 人妻精品4K4K4K4K4| 97干97色| 精品久久在线区一区| 好色综合| 桃色六月天| 日日干天天干夜夜爽| 青青草自拍视频在线播放| 国产99热| 精品人妻1237| 天天干天天舔| 国产精品suv一区| 天天日天天搞天天干| 欧美成人色| 亚洲中文国际强奸字幕| 手机av亚洲丝袜美腿日韩第一页二页| 18禁美女裸体无遮挡啪啪| 青青操视频在线| 色小视频蜜乳| 综合第一页| 婷婷综合在线观看| 中文精品一区二去| 青青伊人这里只有精品| 久久免费精品视频免一| 91操熟女视频| 精品夜夜澡人妻无码| 色欲天天婬色婬香WWW夜色| 日韩操p| 成人欧美日超碰| 日韩不卡av一二三| 特色a在线上| 亚洲综合另类欧美久久久| 樱花蜜乳av| 人人九九精| 婷婷久草一区二区三区| 囯产精品久久久久久久久久梁医生| 麻豆区99999| 综合操逼| 校园春色五月天| 伊人玖玖网| 青青草天天亲夜夜操网| 97超碰人妻| 亚洲日韩东京热一区| 九九色逼| 免费一级性爱久久| 欧美色图小说综合| 九九热免费国产视频婷婷伊人| 日韩99精品视频综合区| 亚洲激情欧美色图| 日本天堂网| 在线观看国产黄色| 日韩三级伊人| 蜜桃AV天堂| 大香蕉天天看妹子| 五月婷婷六月丁香| 在线岛国新天堂8| 91N综合网| 亚洲欧洲色情高清| 九九热免费视频| 亚洲成人日韩小说| 国产日韩久久| 久久久96精品| 日韩中文字幕av在线播放| 久99热| 凹凸视频在线观看伊人| 午夜精品久久一区二区| 久久国产精品视频| 欧美亚洲日韩16色| 艳美熟妇先锋一二三区| 日韩免费看黄片| 18啪啪手机免费性爱| 亚洲黄色| 久久r精品| 2026国产精品视频| 久久婷婷在线观看视频| 超碰在线91| 91操人| 亚洲伊人a线观看视频| 欧美色999| 99999久久精| 大香蕉日亚洲日本亚大| 免费久久9999| 熟妇高潮一区二区免费视频| 婷婷色五月激情| 亚洲熟女av日韩熟女| 天堂а√在线最新版在线| 久操精品| 综合夜夜| 大香蕉线| 男女啊啊啊啊啊| 久超碰这里只有精品| 亚欧美综合网。| 久久久久密臀视频| 天天看特黄的免费网站| 亚洲情色1区| 久久久999网站| 97天天搞在线| 一二三四日本视频高清| 久操大香蕉手机视频在线看| 日本片日本片祼观看网站在线看中文版网页在线看 | 一区不卡在线观看av| 欧美日韩国产成人高清| 欧美色亚洲| 97超碰碰| 国产午夜精品理论片一二三区区| 91视频在线观看18| 91另类| 国产h小视频在线观看免费| 国产传媒日韩| 超碰午夜| 久艾草在线精品视频在线观看| 亚欧无码线免费观看视频| TS人妖另类精品视频系列| 亚洲无992tv| 国产亚洲福利第一页丝袜| 精品欧美不卡在线播放| 三级精品三级在线观看| 国产高清精品一区二区三区毛片| 岛国视频一二三区| 天天综合网~91| 婷婷五月天福利| 成人综合网 欧美| AV男人天堂网| 亚洲成人碰碰| 中文字幕一区 二区三四五 区日 日骚| 国产67194| 热久久91婷婷| 青青青青草av在线观看| 蜜桃视频一区二区三区| 美国三级日本三级久久99| 国产丁香精品露脸视频| 大香蕉综合网| 韩日色费| 人妻人人做人人澡人人爽欧美一区| 小情侣高清国产在线视频| 亚洲色五月| 欧美天天谢综合网| 亚洲综合骚逼| 亚洲黄色电影| 亚洲欧洲成人在线电影| 青青伊人这里只有精品| 亚洲激情网| 中文字幕88av在线| 婷婷激情五月综合| 中文字幕熟女人妻丝袜| 欧美伊人久久综合网| 亚洲第一在线视频| 成人影 天天操 亚洲| 国产十八禁视频| 日本二三四区| 精品无码久久久久久国产浪潮| 男女真人网18| 国产美脚女优尤物在线观看| 九九九九97| 九七超碰| 偷窥自拍A片| 97人人爱人人做人人乐| 久久久一二三四区| 欧美日韩午夜精品一区二区三区 | 不卡超碰护士AV在线免费播放| 久久久久9| 亚洲天天操| aⅴ日韩成人电影av在线免费看av大全 | 色婷久久| 91AV天堂| 日韩性爱小视频| 天天肏夜夜肏| 亚洲综合骚逼| 天天看精品动漫视频一区| 六十路日本| 久久久久久久久久久久九| 97超碰超碰| www久久99| 九区国产| 国产精品嫩草影院午夜两性| 亚洲欧美精品91| 久久久精品一区二区| 日本爽爽爽爽爽爽免费视频| 久久伊人大香蕉| 精品人妻一二三四区视频| 国产美女在线精品免费看| 婷婷五月影院| 97精品视频在线| 国产高清免费不卡av| 免费农村成人少妇人妻Aa一区二区视频 | 91成人18| 九九热精品| 蜜桃香蕉久草精品在线| 国产成人综合在线播放| 欧美性色综合网| 日韩肏逼视频| 青青草视频久久| 欧美亚洲手机在线| 99视频精品| 97久久超碰国产精品| 免费强奸av| 九99久久| 熟女六十路| 99re在线视频国产| 强奸乱伦亚洲第一页| 久久综合中文国产| 色吧5亚洲| 91扒丝袜综合在线| 2020久久免费视频| 欧美熟女少妇| 亚洲全色网| 色穴精品| 富女玩鸭子一级毛片| 日本免费不卡二区| 亚洲乱码精品一区二区| 草b在线 | 超碰97色色| 樱花蜜乳av| 麻豆精品三区视频| 综合操逼| 日本免费二区三区| 亚洲欧美中文日韩视频中国语| 色69大色97香蕉| 成视频在线观看免费看| 超碰超碰超碰超碰的大鸡吧操黑丝袜| 十八禁视频网站| 久久日韩肥臀| 九九久久九九久久| 国产强奸无码乱伦| 男生女生啊啊啊啊| 黄色区免费观看中文字幕| 久热大香蕉网站| 人妻熟女av国产网站| 亚洲激情在线| 一区二区三区 丝袜 高跟 美腿| 搡老女人老91妇女老熟女| 欧美 亚洲 大香| 国产精品久久99日日| 密臀成人视频久久久| 亚洲综合小说另类图欧美视频激情小说色五月天 | 欧美大香蕉卡久久| 色欲三区| 九九九只有精品| 欧美一区91大爱| 国产一区二区三区白丝| 久久9999| 欧美熟爽综合| 日韩国产欧美伦理在线| 色香网| 裸体女人草逼视频播放一区,二区,三区,四区,五区| 亚洲欧美色图小说| 激情四射婷婷六月天| 天天日天天色| 91精品久久久久五月天精品| 天堂精品一区| 99自拍B亚洲 | 好看的91视频| 丁香婷婷九月| 日婷婷| 日本精品一区二区不卡| 人妻人人澡人人爽人人| 99综合免费视频| 亚洲欧洲日韩天堂av| 风间由美日韩欧美久久| 宗合情欲网| 五月香婷婷| 精品中文字幕第一页| 久久精品超碰| 久草热制服丝袜在线观看 | av天堂电影网| 国产丸一视频| 91欧美偷拍| 五月丁香综合| 久操网线| 国产精品不卡一区二区三区av| 中文字幕欧洲有码| 精品乱码久久久久| 射 色综合| 亚洲一区二区精品福利| 另类图片欧美激情综合| 性欧美999| 加勒比少妇AV婷婷六月天超碰超碰| 国产久久一区二区午夜| 亚洲欧美日韩精品久久久一区二区| 草草草视频在线免费看| 国产精品乱码久久久、久久| 人人摸人人干| 日韩AV电影网站| 国产大学生高潮在线播放| 热无码中文亚洲H一道本一区二区| 亚洲色婷婷综合久久一区二区三区| 亚洲欧洲无码97久久精品| 天天透伊人| 99碰碰| 操逼日韩无码 | 这里都是精品在线观看| 免费一级黄色录像影片| 欧美精品久久96人妻无码| 91在线观看,天天综合| 91欧美巨乳| 久久久久9| 亚州色图欧美| 久久精品老司| 一道本东京热加勒比一区二区三区 | 亚州欧美一区| 久久久啊啊啊| 青青草女人天天干| 国产女人9999| 色综合超碰超| 日韩电影天堂视频二区三区| 成人日韩中文字幕| 亚洲无套久久嗯嗯| 加勒比大香蕉视频在线| 久久伊人五月天| 综合色图区| 狠狠色综合网| 色色婷婷丁香| 婷婷激情啪啪| 狠狠中文字幕| 热久久精品| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 久久久中文| 色婷婷丁香五月| 色色综合网站| 红杏大香蕉| 精品少妇后入一区二区三区四区人妻巨乳| www.色五月| 花野真衣| 熟妇一区二区三区| 精品国产一区二区三区久久久蜜臀| 日本精品88888888| 久久精品老司| 天天操人人操骚逼网站| 久热99999| 欧美 亚洲精品首页|