日韩精品一区二区三区在线视频放-无码中文字幕V?一区二区-成年片免费观看视频-国内少妇人妻丰满av-国产精品中文字幕免费观看-亚洲成人久久一区二区三区-国内少妇偷人精品视频无缓冲-一区二区国产精品日本一区二区三区在线网

ARTICLE DETAIL

資訊詳情

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

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

如何找到第 K 短的路徑?——從 Dijkstra 到 Yen 算法 Dijkstra 和反向 Dijkstra 到底分別在什么場(chǎng)景下使用圖中的第 K 短路徑要怎么找如果允許重復(fù)經(jīng)過(guò)節(jié)點(diǎn)或者要求路徑不能重復(fù)經(jīng)過(guò)節(jié)點(diǎn)處理方式有什么不同當(dāng)路徑還帶有等待時(shí)間約束時(shí)算法又該如何改造本文會(huì)通過(guò)四類題型由淺入深地講解這些問(wèn)題。一、標(biāo)準(zhǔn) Dijkstra 算法的描述和應(yīng)用Dijkstra 算法是用來(lái)求解非負(fù)權(quán)圖上的單源最短路徑問(wèn)題的經(jīng)典方法從一個(gè)源點(diǎn)出發(fā)求它到圖中其余節(jié)點(diǎn)的最短距離。有向圖和無(wú)向圖都可以使用但只要存在負(fù)權(quán)邊Dijkstra 的貪心性質(zhì)就不再成立這時(shí)需要使用到 Bellman-Ford 算法但這已經(jīng)超出本文的討論范圍。在具體實(shí)現(xiàn)上我們維護(hù)一個(gè)dist數(shù)組dist[v]表示當(dāng)前已經(jīng)找到的、從起點(diǎn)到節(jié)點(diǎn)v的最短距離上界。在算法運(yùn)行過(guò)程之中這個(gè)值可能經(jīng)過(guò)多次松弛而逐漸變小。可以把 Dijkstra 類比成將普通 BFS 的先進(jìn)先出隊(duì)列換成按照當(dāng)前路徑長(zhǎng)度排序的優(yōu)先隊(duì)列更準(zhǔn)確地說(shuō)它每次選取暫定距離最小的狀態(tài)(distance, u)再遍歷u的所有鄰邊。如果經(jīng)過(guò)u能讓相鄰節(jié)點(diǎn)v的距離變得更小就更新dist[v]這一過(guò)程稱為松弛。由于所有邊權(quán)都非負(fù)一個(gè)沒(méi)有過(guò)期的狀態(tài)從堆頂彈出時(shí)對(duì)應(yīng)節(jié)點(diǎn)的最短距離就可以確定下來(lái)。先以 UVa 423 - MPI Maelstrom 為例看一下堆優(yōu)化 Dijkstra 的代碼實(shí)現(xiàn)題目給定由 n 個(gè)處理器組成的網(wǎng)絡(luò)拓?fù)溥厵?quán)代表相鄰處理器之間的通信耗時(shí)。一個(gè)處理器收到消息之后可以立即向所有與它直接相連的處理器發(fā)送消息并且多個(gè)處理器可以同時(shí)發(fā)送。因此消息最早到達(dá)處理器i的時(shí)間就是從處理器1到i的最短距離等到所有處理器都收到消息時(shí)花費(fèi)的總時(shí)間就是這些最短距離中的最大值。輸入格式第一行輸入整數(shù) n處理器數(shù)量滿足 1 ≤ n ≤ 100。后續(xù)輸入描述一個(gè) n × n 的鄰接矩陣 A其中 A(i,j) 代表從處理器 i 直接向處理器 j 發(fā)送消息的通信開銷若輸入為字符x則表示二者之間沒(méi)有直接連接。節(jié)點(diǎn)向自身發(fā)送消息不需要網(wǎng)絡(luò)傳輸因此 A(i,i)0。網(wǎng)絡(luò)為無(wú)向圖滿足 A(i,j)A(j,i)。輸入僅給出鄰接矩陣嚴(yán)格下三角部分第 2 行1 個(gè)數(shù)據(jù) A(2,1)第 3 行2 個(gè)數(shù)據(jù) A(3,1), A(3,2)輸出格式從 1 號(hào)處理器向所有其他處理器廣播消息所需的最短時(shí)間。輸入樣例5 50 30 5 100 20 50 10 x x 10輸出樣例35這一道題目可以采用標(biāo)準(zhǔn) Dijkstra 算法解決。我們用鄰接表存圖用一維數(shù)組記錄處理器1到每個(gè)節(jié)點(diǎn)的當(dāng)前最短距離再使用小根優(yōu)先隊(duì)列按照距離從小到大擴(kuò)展?fàn)顟B(tài)。最后取dist[1...n]的最大值就是完成廣播所需的最短時(shí)間。給出如下的完整代碼#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); //鄰接表方式存儲(chǔ)圖 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é)點(diǎn)編號(hào)。graph[i]存放所有從節(jié)點(diǎn)i出發(fā)的邊無(wú)向邊需要分別加入兩個(gè)方向。有向圖和無(wú)向圖都可以使用鄰接表只是加邊方式不同。vectorll dist(n1, INF);則記錄從起點(diǎn)到各節(jié)點(diǎn)當(dāng)前已知的最短距離。priority_queuepli, vectorpli, greaterpli pq;定義了小根優(yōu)先隊(duì)列。每個(gè)元素的含義是{從起點(diǎn)到當(dāng)前節(jié)點(diǎn)的距離, 當(dāng)前節(jié)點(diǎn)編號(hào)}隊(duì)列先比較距離距離相同時(shí)再比較節(jié)點(diǎn)編號(hào)。Dijkstra 真正依賴的是距離較小的狀態(tài)先出隊(duì)節(jié)點(diǎn)編號(hào)只負(fù)責(zé)在距離相同時(shí)確定一個(gè)穩(wěn)定的先后順序不會(huì)影響最短距離的正確性。for (const auto e : graph[u])遍歷節(jié)點(diǎn)u的所有鄰邊。若distance e.w dist[v]說(shuō)明經(jīng)過(guò)u到達(dá)v更短此時(shí)更新dist[v]并把新狀態(tài)加入優(yōu)先隊(duì)列。if (distance ! dist[u]) continue;用來(lái)跳過(guò)過(guò)期狀態(tài)。比如隊(duì)列中先后出現(xiàn){10,u}和{7,u}當(dāng){10,u}出隊(duì)時(shí)dist[u]已經(jīng)被更新為 7那么距離 10 的狀態(tài)就沒(méi)有繼續(xù)擴(kuò)展的必要。這里不是說(shuō)節(jié)點(diǎn)u只能處理一次而是只處理與當(dāng)前最優(yōu)記錄一致的狀態(tài)。在絕大多數(shù)稀疏圖中鄰接表加小根優(yōu)先隊(duì)列都是最常用也最穩(wěn)妥的實(shí)現(xiàn)。采用上面這種允許同一節(jié)點(diǎn)多次入堆、出隊(duì)時(shí)跳過(guò)舊狀態(tài)的寫法時(shí)堆中最多可能出現(xiàn) O(E) 個(gè)狀態(tài)因此也可以把復(fù)雜度寫成 O((VE)log E)。對(duì)于普通簡(jiǎn)單圖E ≤ V2所以通常簡(jiǎn)寫為 O((VE)log V)。空間復(fù)雜度為 O(VE)。鄰接表加優(yōu)先隊(duì)列屬于堆優(yōu)化 Dijkstra尤其適合邊數(shù)遠(yuǎn)小于 V2 的稀疏圖。為了對(duì)照另一種寫法接下來(lái)看 POJ 2387 - Til the Cows Come Home。題目給定一個(gè)正權(quán)無(wú)向圖節(jié)點(diǎn)數(shù)量滿足 2 ≤ V ≤ 1000邊數(shù)量滿足 1 ≤ E ≤ 2000要求節(jié)點(diǎn) V 到節(jié)點(diǎn) 1 的最短距離。輸入格式第1行兩個(gè)整數(shù)E和V即先給定邊數(shù)再給定頂點(diǎn)數(shù)目第2到E1行每行描述一條道路包含三個(gè)用空格分隔的整數(shù)。前兩個(gè)整數(shù)表示道路連接的地標(biāo)編號(hào)第三個(gè)整數(shù)表示道路長(zhǎng)度范圍1到100輸出格式一個(gè)整數(shù)表示貝茜從 V 號(hào)地標(biāo)到 1 號(hào)地標(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; }這道題目還需要處理重邊。比如輸入之中可能同時(shí)存在1 2 20 1 2 15采用鄰接矩陣時(shí)同一對(duì)節(jié)點(diǎn)之間只需要保留最短的那條邊graph[u][v] min(graph[u][v], (ll)w); graph[v][u] min(graph[v][u], (ll)w);dist[i]的含義仍然是從起點(diǎn) V 到節(jié)點(diǎn)i當(dāng)前已知的最短距離初始化為INF表示暫時(shí)無(wú)法到達(dá)。每一輪通過(guò)線性掃描找到一個(gè)尚未確定、且dist最小的節(jié)點(diǎn)u再用dist[u] graph[u][v]松弛其他節(jié)點(diǎn)。由于邊權(quán)非負(fù)u被選中之后它的最短距離就可以確定下來(lái)。上述代碼展示的是 Dijkstra 的樸素實(shí)現(xiàn)時(shí)間復(fù)雜度為 O(V^2)空間復(fù)雜度也是 O(V^2)。需要說(shuō)明的是POJ 2387 本身只有至多 2000 條邊實(shí)際上屬于稀疏圖使用鄰接表加優(yōu)先隊(duì)列會(huì)更合適這里只是借它規(guī)模不大的數(shù)據(jù)展示鄰接矩陣版本。當(dāng) E 接近 V^2 時(shí)圖才是真正的稠密圖此時(shí)鄰接矩陣結(jié)合線性掃描往往更直接也可能比頻繁維護(hù)堆更快。選擇實(shí)現(xiàn)方式時(shí)應(yīng)該先看 E 與 V^2 的關(guān)系而不是默認(rèn)某一種寫法永遠(yuǎn)更優(yōu)。二、A* 算法和第 K 短路徑在標(biāo)準(zhǔn) Dijkstra 算法之中dist數(shù)組只為每個(gè)節(jié)點(diǎn)保留一個(gè)最優(yōu)值。但是如果我們需要找的不是最短路徑而是第 K 短路徑這時(shí)候應(yīng)該如何處理呢一個(gè)直接的想法是不再讓每個(gè)節(jié)點(diǎn)只出隊(duì)一次而是統(tǒng)計(jì)它第幾次從優(yōu)先隊(duì)列中取出。對(duì)于正權(quán)圖第 1 次取出節(jié)點(diǎn)u對(duì)應(yīng)到達(dá)u的最短路徑第 2 次對(duì)應(yīng)第二短依次類推。這個(gè)方法能夠求允許重復(fù)經(jīng)過(guò)節(jié)點(diǎn)和邊的第 K 短路但如果直接按照已經(jīng)走過(guò)的距離擴(kuò)展優(yōu)先隊(duì)列中會(huì)出現(xiàn)大量最終到不了終點(diǎn)、或者明顯偏離終點(diǎn)的狀態(tài)。A* 的作用就是利用“距離終點(diǎn)還剩多遠(yuǎn)”來(lái)調(diào)整擴(kuò)展順序盡量少搜索無(wú)關(guān)區(qū)域。下面以 POJ 2449 - Remmarguts Date 為例。題目大意是在有向正權(quán)圖中求從起點(diǎn) S 到終點(diǎn) T 的第 K 短路徑長(zhǎng)度。路徑允許重復(fù)經(jīng)過(guò)節(jié)點(diǎn)和邊長(zhǎng)度相同但經(jīng)過(guò)方式不同的路徑也分別計(jì)數(shù)如果不存在第 K 短路徑則輸出-1。輸入格式第一行包含兩個(gè)整數(shù)N和M1 ≤ N ≤ 10000 ≤ M ≤ 1000000。站點(diǎn)編號(hào)從1到N。隨后M行每行包含三個(gè)整數(shù)A、B和T1 ≤ A,B ≤ N1 ≤ T ≤ 100表示存在一條從A站點(diǎn)到B站點(diǎn)的單向小路耗時(shí)為T。最后一行包含三個(gè)整數(shù)S、T和K1 ≤ S,T ≤ N1 ≤ K ≤ 1000。輸出格式單獨(dú)一行輸出一個(gè)整數(shù)表示第 K 短路徑的長(zhǎng)度不存在則輸出-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ǔ)上再給每一個(gè)狀態(tài)加上“從當(dāng)前節(jié)點(diǎn)到終點(diǎn)還需要多少代價(jià)”的估計(jì)。標(biāo)準(zhǔn) Dijkstra 只按照起點(diǎn)到當(dāng)前節(jié)點(diǎn)的距離排序行為就像以起點(diǎn)為圓心不斷向外擴(kuò)散A* 則同時(shí)考慮已經(jīng)走了多遠(yuǎn)以及距離目標(biāo)還可能有多遠(yuǎn)因此會(huì)優(yōu)先擴(kuò)展更有希望較早到達(dá)終點(diǎn)的狀態(tài)。A* 會(huì)給每個(gè)待搜索狀態(tài)計(jì)算評(píng)價(jià)函數(shù)f(n) g(n) h(n)。其中g(shù)(n)表示從起點(diǎn) S 到節(jié)點(diǎn) n 已經(jīng)付出的實(shí)際代價(jià)h(n)表示從節(jié)點(diǎn) n 到終點(diǎn) T 的估計(jì)代價(jià)搜索時(shí)優(yōu)先取出f(n)更小的狀態(tài)。值得注意的是標(biāo)準(zhǔn) Dijkstra 可以看成h(n)0的特殊情況。為了保證搜索順序的正確性啟發(fā)函數(shù)通常要求不能高估真實(shí)距離并且在滿足此條件下啟發(fā)函數(shù)越接近真實(shí)值A(chǔ)*算法搜索效率和正確率也就越高擴(kuò)展的無(wú)效節(jié)點(diǎn)也就越少。也就是需要滿足以下兩個(gè)條件可容許性對(duì)任意節(jié)點(diǎn)nh(n)不能大于從n到終點(diǎn)的真實(shí)最短距離。即h(n) ≤ d(n,target)其中d(n, target)是節(jié)點(diǎn)n到終點(diǎn)的真實(shí)最短距離。這是為了保證A*找到的是真正的最短路徑。一致性對(duì)于任意邊W(a,b)滿足h(a) \leq w(a,b) h(b)其中w(a,b)是a 到b的權(quán)值。這是可容許行更強(qiáng)的條件。而在這道題中我們直接在反圖上從終點(diǎn)執(zhí)行一次 Dijkstra得到原圖中每個(gè)節(jié)點(diǎn)到終點(diǎn)的真實(shí)最短距離。也就是說(shuō)這里的h(n)不是大概估計(jì)而是一個(gè)精確的啟發(fā)函數(shù)。為什么要建反圖原圖中的邊是u - v反圖中就存成v - u。從終點(diǎn) T 在反圖上運(yùn)行 Dijkstra得到的h[u]恰好就是原圖中從u到 T 的最短距離。若h[u]為無(wú)窮大說(shuō)明從u根本無(wú)法到達(dá)終點(diǎn)這類狀態(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)先隊(duì)列中的一個(gè)搜索狀態(tài)把當(dāng)前節(jié)點(diǎn)node、已經(jīng)走過(guò)的實(shí)際距離g、預(yù)計(jì)經(jīng)過(guò)終點(diǎn)時(shí)的總距離fgh放在一起。重載之后小根堆會(huì)優(yōu)先取出f較小的狀態(tài)若f相同再優(yōu)先取出g較小的狀態(tài)。建圖時(shí)同時(shí)保存原圖和反圖。反向 Dijkstra 得到的h[i]表示原圖中從節(jié)點(diǎn)i到終點(diǎn)的真實(shí)最短距離。它不僅給 A* 提供搜索方向也可以提前過(guò)濾h[v] INF的節(jié)點(diǎn)因?yàn)檫@些節(jié)點(diǎn)無(wú)論如何都無(wú)法走到終點(diǎn)。popCount[u]記錄節(jié)點(diǎn)u已經(jīng)有效出隊(duì)多少次。與標(biāo)準(zhǔn) Dijkstra 不同這里不能在第一次取出u后就永遠(yuǎn)丟掉其他到達(dá)方式因?yàn)榈?2 次、第 3 次到達(dá)u的路徑仍然可能組成最終答案。由于邊權(quán)為正優(yōu)先隊(duì)列按照f(shuō)擴(kuò)展而終點(diǎn)處滿足h[target]0所以終點(diǎn)第 K 次出隊(duì)時(shí)對(duì)應(yīng)的g就是第 K 短路徑長(zhǎng)度。open是 A* 的候選狀態(tài)隊(duì)列。每次取出f最小的狀態(tài)遍歷它的出邊再把新的候選放回隊(duì)列。它保存的是一條條路徑狀態(tài)而不是每個(gè)節(jié)點(diǎn)唯一的最短距離所以同一個(gè)節(jié)點(diǎn)可以在隊(duì)列中出現(xiàn)多次真正限制有效擴(kuò)展次數(shù)的是popCount。如果start target初始狀態(tài){start, 0, h[start]}會(huì)先把長(zhǎng)度為 0 的空路徑算作一次到達(dá)。但原題要求的是實(shí)際經(jīng)過(guò)邊的路徑所以代碼中需要先執(zhí)行k把空路徑跳過(guò)去。這里用反向 Dijkstra 求出的h[i]是精確最短距離不是估計(jì)值。它同時(shí)滿足可容許性和一致性因此 A* 不僅能保證找到第 K 短路而且每個(gè)狀態(tài)第一次出隊(duì)時(shí)就是該節(jié)點(diǎn)在當(dāng)前 g 下的最優(yōu)擴(kuò)展順序。如果換成一個(gè)粗糙的估計(jì)函數(shù)雖然也可能正確但搜索效率會(huì)明顯下降。這里求的是允許重復(fù)節(jié)點(diǎn)和邊的第 K 短“游走”只是競(jìng)賽題中通常仍然簡(jiǎn)稱為第 K 短路。不同路徑即使長(zhǎng)度相同也要分別計(jì)數(shù)所以優(yōu)先隊(duì)列中的重復(fù)狀態(tài)不能簡(jiǎn)單去重。反向 Dijkstra 的復(fù)雜度為 O((NM)\log N)A* 階段中每個(gè)節(jié)點(diǎn)最多有效擴(kuò)展 K 次粗略上界可以寫成 O(KM\log(KM))。啟發(fā)函數(shù)主要減少實(shí)際擴(kuò)展的無(wú)關(guān)狀態(tài)但不會(huì)改變這里給出的最壞復(fù)雜度上界。三、Yen 算法思想和第 K 短簡(jiǎn)單路徑上一道題允許重復(fù)經(jīng)過(guò)節(jié)點(diǎn)和邊因此同一個(gè)節(jié)點(diǎn)可以被多次擴(kuò)展。但是如果題目要求路徑中不能重復(fù)經(jīng)過(guò)節(jié)點(diǎn)這種“統(tǒng)計(jì)終點(diǎn)第幾次出隊(duì)”的方法就不能直接使用了。下面介紹 UVa 1685 - Enjoyable Commutation這道題要求的正是第 K 短簡(jiǎn)單路徑。題目給定一個(gè)帶正權(quán)的有向圖需要求從起點(diǎn) a 到終點(diǎn) b 的第 K 短路徑滿足一條路徑不能重復(fù)經(jīng)過(guò)同一個(gè)節(jié)點(diǎn)也就是必須是簡(jiǎn)單路徑先按照路徑總長(zhǎng)度從小到大排序如果兩條路徑長(zhǎng)度相同再按照節(jié)點(diǎn)序列的字典序排序如果不足 K 條路徑輸出None否則用連字符輸出第 K 條路徑經(jīng)過(guò)的節(jié)點(diǎn)。每組數(shù)據(jù)的第一行包含n m k a b其中 2 \leq n \leq 501 \leq k \leq 200。接下來(lái)的 m 行每行給出一條有向邊x y d。題目保證不存在自環(huán)同一對(duì)有序節(jié)點(diǎn)之間也不會(huì)出現(xiàn)重邊。輸入以五個(gè) 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 算法先求出第一短的簡(jiǎn)單路徑然后依次構(gòu)造第二短、第三短直到得到第 K 短。假設(shè)當(dāng)前已經(jīng)確定的一條路徑為1 - 2 - 4 - 6任何一條與它不同的新路徑都一定存在一個(gè)“第一次發(fā)生偏離的位置”。這個(gè)位置可能在節(jié)點(diǎn) 1、節(jié)點(diǎn) 2也可能在節(jié)點(diǎn) 4。于是我們可以依次把這些節(jié)點(diǎn)當(dāng)作偏離點(diǎn)將整條路徑拆成兩部分完整路徑 rootPath spurPath其中rootPath是從起點(diǎn)到偏離點(diǎn)的公共前綴spurPath是從偏離點(diǎn)重新走向終點(diǎn)的后半段。為了讓新路徑既不同于已有答案又仍然是簡(jiǎn)單路徑需要做兩類限制禁止rootPath中偏離點(diǎn)之前的所有節(jié)點(diǎn)防止后半段繞回前綴并重復(fù)經(jīng)過(guò)節(jié)點(diǎn)對(duì)所有與當(dāng)前rootPath前綴相同的已有答案禁止它們?cè)谄x點(diǎn)之后使用的那條邊防止重新生成已經(jīng)確定的路徑。每個(gè)偏離點(diǎn)都可能產(chǎn)生一條候選路徑這些候選不能在本輪結(jié)束后丟掉因?yàn)榈谝粭l路徑產(chǎn)生的某個(gè)候選也可能直到第五輪才成為最優(yōu)答案。所以代碼使用一個(gè)全局候選集合candidates按照“總長(zhǎng)度、節(jié)點(diǎn)序列字典序”排序。每一輪從中取出最小者作為下一條正式答案。還需要解決一個(gè)子問(wèn)題在刪除部分節(jié)點(diǎn)和邊之后如何找到長(zhǎng)度最短、且字典序最小的路徑這里先在反圖上從終點(diǎn)執(zhí)行 Dijkstra得到dist[u]表示節(jié)點(diǎn)u到終點(diǎn)的最短距離。然后從起點(diǎn)正向恢復(fù)路徑每一步在所有滿足dist[u] w(u,v) dist[v]的鄰邊中選擇終點(diǎn)編號(hào)最小的一個(gè)。距離條件保證最終仍然是最短路徑鄰接點(diǎn)從小到大選擇則保證節(jié)點(diǎn)序列的字典序最小。完整代碼如下#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; // 路徑總長(zhǎng)度 vectorint nodes; // 路徑上的節(jié)點(diǎn)序列 }; ? 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 對(duì)應(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)按終點(diǎn)編號(hào)升序排列。 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 自動(dòng)按照題目要求排序并且自動(dòng)去重。 setPath, PathCmp candidates; ? // 額外記錄已成為答案的節(jié)點(diǎn)序列防止極端情況下重復(fù)加入。 setvectorint acceptedPaths; acceptedPaths.insert(firstPath.nodes); ? while ((int)answers.size() K) { const Path previousPath answers.back(); int pathSize (int)previousPath.nodes.size(); ? // rootCost 表示從起點(diǎn)到當(dāng)前偏離點(diǎn)的前綴長(zhǎ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é)點(diǎn)保證最終路徑不重復(fù)訪問(wèn)節(jié)點(diǎn)。 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 的第一個(gè)節(jié)點(diǎn)就是 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; }代碼中有幾個(gè)地方需要重點(diǎn)理解answers保存已經(jīng)正式確定的路徑candidates保存所有尚未被選中的候選路徑。candidates定義在外層循環(huán)之外因此以前產(chǎn)生但暫時(shí)沒(méi)有入選的路徑會(huì)一直保留這正是 Yen 算法不能缺少的候選池。bannedNode只禁止根路徑中spurNode之前的節(jié)點(diǎn)不禁止偏離點(diǎn)本身。否則無(wú)法從偏離點(diǎn)出發(fā)尋找新的后綴如果完全不禁前綴節(jié)點(diǎn)新后綴又可能繞回前面生成帶重復(fù)節(jié)點(diǎn)的路徑。bannedEdge需要檢查所有已經(jīng)進(jìn)入answers的路徑。只禁止上一條答案使用的邊是不夠的否則可能重新生成更早已經(jīng)出現(xiàn)過(guò)的路徑。shortestPath每次都在當(dāng)前的禁點(diǎn)、禁邊條件下重新求最短路。由于原題邊權(quán)嚴(yán)格為正根據(jù)dist恢復(fù)路徑時(shí)不會(huì)陷入零權(quán)環(huán)同時(shí)題目保證同一對(duì)有序節(jié)點(diǎn)之間至多一條邊所以可以直接使用(u,v)表示一條被禁用的邊并使用weightEdge[u][v]計(jì)算前綴長(zhǎng)度。Yen 算法正確性的關(guān)鍵就在“第一次偏離”上。任意一條尚未進(jìn)入答案集合的簡(jiǎn)單路徑與某一條已有路徑相比都可以找到第一個(gè)不同的邊。枚舉已有路徑上的每個(gè)偏離點(diǎn)就不會(huì)漏掉它可能對(duì)應(yīng)的候選而每次從全局候選池中取出排序最小的路徑又保證了新加入answers的確實(shí)是下一條路徑。一次shortestPath主要執(zhí)行一次堆優(yōu)化 Dijkstra復(fù)雜度約為 O((NM)\log N)。一條簡(jiǎn)單路徑最多包含 N 個(gè)節(jié)點(diǎn)生成一條新答案時(shí)最多調(diào)用 O(N) 次最短路所以核心復(fù)雜度可以粗略寫成 O(KN(NM)\log N)。當(dāng)前代碼為了判斷相同前綴還會(huì)直接掃描已有答案最壞會(huì)額外產(chǎn)生 O(K^2N^2) 的前綴比較候選路徑本身最多占用 O(KN^2) 的空間。在本題 N \leq 50、K \leq 200 的范圍內(nèi)這樣的寫法更直觀也足以應(yīng)對(duì)數(shù)據(jù)范圍。四、另一種 K 短路允許重復(fù)經(jīng)過(guò)節(jié)點(diǎn)并帶有等待約束第二部分的 POJ 2449 已經(jīng)允許重復(fù)經(jīng)過(guò)節(jié)點(diǎn)和邊這一部分真正增加的難點(diǎn)不是“允許重復(fù)”而是邊的代價(jià)會(huì)隨到達(dá)時(shí)間發(fā)生變化。下面以 UVa 1684 - Escape Plan 為例。題目中有 N 個(gè)星球編號(hào)為 0 到 N-1其中 0 是起點(diǎn)N-1 是終點(diǎn)。星球之間存在單向的超空間隧道每條隧道由四個(gè)整數(shù)U V C W描述隧道從U指向V通過(guò)隧道需要花費(fèi)W秒隧道只會(huì)在時(shí)間 0,C,2C,3C,\dots 開放在任意一個(gè)星球上連續(xù)等待的時(shí)間不能超過(guò)T秒。有 K 艘帝國(guó)殲星艦會(huì)沿著較短的路線追擊因此需要求從 0 到 N-1 的第 K1 短路徑。路徑允許重復(fù)經(jīng)過(guò)節(jié)點(diǎn)和邊花費(fèi)時(shí)間相同的不同走法也要分別計(jì)數(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通過(guò)隧道的時(shí)間滿足 1 \leq W \leq 10^6。輸入以四個(gè) 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)前位于哪個(gè)節(jié)點(diǎn)”作為狀態(tài)就會(huì)丟失必要的信息。比如同樣到達(dá)節(jié)點(diǎn)u到達(dá)時(shí)間分別為 8 和 9面對(duì)一條每 3 秒開放一次的隧道接下來(lái)需要等待的時(shí)間并不相同。因此這里需要把狀態(tài)寫成(node, phase)其中phase是當(dāng)前總時(shí)間對(duì)所有隧道周期最小公倍數(shù)的余數(shù)。因?yàn)?1 \leq C \leq 10所有周期的最小公倍數(shù)最多為lcm(1,2,...,10) 2520只要兩個(gè)到達(dá)時(shí)間模period相同它們面對(duì)每一條隧道時(shí)的開放情況就完全相同。這樣一來(lái)原本隨絕對(duì)時(shí)間變化的問(wèn)題就被展開成了至多 N \times 2520 個(gè)有限狀態(tài)。假設(shè)當(dāng)前時(shí)間對(duì)周期的余數(shù)為phase準(zhǔn)備經(jīng)過(guò)周期為cycle的邊。距離最近一次可出發(fā)時(shí)間還需要等待int firstWait (cycle - phase % cycle) % cycle;但是不能只考慮最近的一次開放。如果firstWait cycle、firstWait 2 * cycle仍然不超過(guò)T主動(dòng)多等一段時(shí)間也是合法選擇并且可能影響后續(xù)邊的開放時(shí)刻。所以代碼需要枚舉firstWait, firstWait cycle, firstWait 2 * cycle, ... T下面按照“完整行程”計(jì)數(shù)一次行程不只包含經(jīng)過(guò)的隧道也包含每次等待之后選擇的出發(fā)時(shí)刻。因此即使經(jīng)過(guò)的節(jié)點(diǎn)序列相同只要等待安排不同產(chǎn)生的狀態(tài)轉(zhuǎn)移序列也不同代碼會(huì)把它們分別保留。這個(gè)口徑也解釋了為什么不能只為一條邊保留最近的開放時(shí)刻如果只按邊序列區(qū)分路徑則還需要另外去重。在展開后的狀態(tài)圖上所有轉(zhuǎn)移代價(jià)都是wait cost并且嚴(yán)格大于 0因此仍然可以使用類似 Dijkstra 的小根堆。used[u][p]不表示這個(gè)狀態(tài)是否訪問(wèn)過(guò)而是記錄狀態(tài)(u,p)已經(jīng)第幾次有效出隊(duì)。相同狀態(tài)最多擴(kuò)展 K1 次如果它已經(jīng)有 K1 種耗時(shí)不大于當(dāng)前方案的到達(dá)方式那么后面的任意一段走法都可以分別接在這 K1 個(gè)前綴之后當(dāng)前方案不可能再影響終點(diǎn)的前 K1 個(gè)答案。當(dāng)終點(diǎn)第 K1 次出隊(duì)時(shí)當(dāng)前總時(shí)間就是答案。代碼還在反圖上做了一次普通 BFS提前標(biāo)記哪些節(jié)點(diǎn)在拓?fù)渖夏軌虻竭_(dá)終點(diǎn)不能到達(dá)終點(diǎn)的分支無(wú)需進(jìn)入優(yōu)先隊(duì)列。完整代碼如下#include bits/stdc.h using namespace std; ? typedef long long ll; ? struct Edge { int to; int cycle; int cost; }; struct State { ll dist; // 從 0 號(hào)星球出發(fā)所用的總時(shí)間 int node; // 當(dāng)前星球 int phase; // 當(dāng)前時(shí)間模所有周期的最小公倍數(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)先隊(duì)列中彈出的次數(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; }這份代碼之中需要注意下面幾個(gè)細(xì)節(jié)period period / gcd_int(period, c) * c逐步計(jì)算所有隧道周期的最小公倍數(shù)。因?yàn)槊總€(gè)c都不超過(guò) 10所以period最大只有 2520不會(huì)出現(xiàn)狀態(tài)數(shù)量無(wú)限增長(zhǎng)的問(wèn)題。nextPhase可以直接通過(guò)(cur.phase wait e.cost) % period計(jì)算。雖然cur.phase不是完整的絕對(duì)時(shí)間但是所有邊的周期都整除period因此保留這個(gè)余數(shù)已經(jīng)足夠決定后續(xù)所有等待時(shí)間。used[u][p]必須在狀態(tài)出隊(duì)時(shí)增加而不是在入隊(duì)時(shí)增加。優(yōu)先隊(duì)列保證出隊(duì)順序按照總時(shí)間遞增若在入隊(duì)時(shí)就計(jì)數(shù)后加入但距離更短的合法狀態(tài)可能會(huì)被過(guò)早剪掉。優(yōu)先隊(duì)列中可能存在dist、node、phase完全相同的多個(gè)狀態(tài)這里不能像普通最短路那樣去重。它們可能由不同的路徑或者不同的隧道產(chǎn)生而題目要求這些走法分別計(jì)數(shù)。canReachTarget只根據(jù)圖的連通關(guān)系進(jìn)行剪枝。它為false時(shí)一定無(wú)法到達(dá)終點(diǎn)為true只表示拓?fù)渖洗嬖诼窂讲⒉槐WC在等待上限之內(nèi)一定可行真正的時(shí)間約束仍然要在狀態(tài)轉(zhuǎn)移時(shí)判斷。題目給的是追兵數(shù)量 K要求的是第 K1 短路徑所以代碼使用need K 1。這一點(diǎn)和第二、三部分直接輸入“第 K 條”并不一樣。單條隧道的通過(guò)時(shí)間可達(dá) 10^6路徑又允許繞環(huán)所以總時(shí)間使用long long存儲(chǔ)。令 L 為所有周期的最小公倍數(shù)RK1。對(duì)于一條周期為 C_e 的邊在一個(gè)時(shí)間相位下最多產(chǎn)生 \lfloor T/C_e\rfloor1 種等待方案。如果把展開圖的邊數(shù)記為令 L 為所有周期的最小公倍數(shù)RK1。對(duì)于一條周期為 Ce 的邊在一個(gè)時(shí)間相位下最多產(chǎn)生 ?T/Ce?1 種等待方案。如果把展開圖的邊數(shù)記為/ppE ≤ L·Σsube∈E/sub(?T/Csube/sub?1)/pp那么多次出隊(duì) Dijkstra 的時(shí)間復(fù)雜度可以寫成 O(RE·log(RE))。used數(shù)組的空間復(fù)雜度為 O(NL)如果把優(yōu)先隊(duì)列中的狀態(tài)也計(jì)算在內(nèi)最壞空間可以寫成 O(NLRE)。代碼在狀態(tài)出隊(duì)時(shí)現(xiàn)場(chǎng)枚舉轉(zhuǎn)移因此不需要顯式建出整張展開圖。這個(gè)上界比較松實(shí)際產(chǎn)生的候選狀態(tài)數(shù)量仍然取決于圖的結(jié)構(gòu)。五、總結(jié)最后把本文幾種容易混淆的模型放在一起比較問(wèn)題類型路徑是否允許重復(fù)節(jié)點(diǎn)狀態(tài)中需要保留什么適合的做法單源最短路不作限制最短解可取簡(jiǎn)單路徑當(dāng)前節(jié)點(diǎn)Dijkstra第 K 短游走允許當(dāng)前節(jié)點(diǎn)、到達(dá)次數(shù)反向 Dijkstra 計(jì)算啟發(fā)函數(shù)再用 A* 多次擴(kuò)展第 K 短簡(jiǎn)單路徑不允許完整路徑前綴與偏離位置Yen 算法 受限最短路帶周期等待的第 K 短游走允許當(dāng)前節(jié)點(diǎn)、時(shí)間相位、到達(dá)次數(shù)狀態(tài)展開 多次出隊(duì)的 Dijkstra所以遇到“第 K 短路”時(shí)第一件事不是直接套模板而是先確認(rèn)題目中的“路徑”到底是什么能不能重復(fù)經(jīng)過(guò)節(jié)點(diǎn)和邊相同長(zhǎng)度的不同走法是否分別計(jì)數(shù)邊權(quán)是否會(huì)隨狀態(tài)或時(shí)間變化。把這幾個(gè)問(wèn)題區(qū)分清楚之后應(yīng)該使用 A*、Yen還是狀態(tài)展開通常也就比較明確了。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
亚洲天堂,男人| 丰满人妻大屁一区二区| 成人a级高清视频在线观看| 在线色导航| 97人肏| 天天综合麻豆视频| 免费福利视频中文字幕| 午夜精品久久久久久久99热影院| 大香蕉狠狠爱| WWW4虎| 亚洲欧美另类小说| 色综合尤物| 伊人AAA| 中文字幕av片| 久久久国产三级黄色片| 精品人妻一区二区三区视频| 少妇熟女1区2区3区| 五月丁香综合| 久久久久久久性爱| 日韩三级视频一区二区三区| 久热一区二区| 91亚·色| 九久久九九久视频| 国产亚洲综合欧美一区| 大香蕉人妻久久| 日韩少妇一区二区三区| 国产超碰欧美| av九九| 丝袜美腿丝袜| www.zbzhongsen.com| 亚洲成人在线资源| 亚乱色| 久欲AV| 性爱乱伦一区| 日日爱99| 久久综合精品一区二区三区| 超碰97人妻免费在线| 99超碰色| 在线观看不卡一区二区三区| 91九色首页| 不卡九肏| 精品黄色电影| 欧美A片中文字幕| 4141514逼喷水三级片| 97精| 欧美图片偷拍| 91人精品妻入口| 色97| 国产精品久久久久久久电影渣男| 青青草黑寡妇男人天堂| 亚洲 一区二区 自拍| 久久风骚城市| 91久久久久久久久久久| 2021久久国产综合精品青草| Aa东京男人的天堂| 大香蕉操久久| 操高情无码| 天天天操天天天爱| 二区熟妇韩日| 亚州免费啪啪视频| av2014 日韩在线中文字幕| 九九九九久久久| 亚洲av国产av综合av卡| 9999九九九久久久| 亚洲自拍欧美色综合| 99国产精品| 婷婷色香| 丁香五月天激情| 欧美一级黄色免费专区| 青操影院| 精彩国产视频播放1区2区| 精品人妻中文字幕4399| 亚洲无码日韩电影| 美腿丝袜高跟网免费视频免费视频| 综合操逼| 久久久人妻| 欧美精品精品一区二区| 激情四射婷婷六月天| 九九色婷婷| 不卡av免费在线网址| 国产精品午夜福利视频| 大香蕉免费中文| 国产精品视频播放| 婷婷五月天av| 91精品人妻偷情| 丁香五月天久久精品视频一区二区三区| 婷婷中文网| 男人天堂网站| 日韩天天综合| 美女91av| 第二页中文字幕| 亚洲色综合| 国产女s强制榨精视频| 欧美性五月| 伊人国产视频| 偷拍 精品 另类 四区| 国产h片在线观看视频| 天天综合青苹果| 亚热日本熟女| 久久9精品视频| 欧美黄色片AAAAA| 男女激烈网站最新| av一区二区三区四区| 亚洲极品| 99色婷婷中文字幕乱色| 激情专区综合| caoni国产亚洲av| a片久久久久久久久久久久 | 午夜精品久久久久久久久久蜜桃| 午夜精品久久久久久久久久久久久| 欧美色图人妻| 久操九九九九九九九九九九九九九九九九九九九九九九九九九九九九 | 中文字幕国产在线天堂| 国产精品96久久久久久| 欧美97网| 欧美熟妇色| 五月天亚洲网| 噜噜噜亚洲精品| 国产成年免费大片黄在线观看| 国产97色在线| 色香综合| 亚洲综合色在线| 日韩精品99久久久久久中文字幕 | 二对二中文字幕。| av操操不卡| 一色网男人的天堂| 91人人看| 好好的日:com久久九九| 日本熟人妻中文字幕在线|...久久国产精品-国产精品_日本一区二区三区中文字幕 | 五月丁香久久| 91狠狠综合久久| 国产精品久久99日日| 韩国手机不卡无码三级视频| 69视频入口| 亚洲综合999| 国产91 丝袜在线播放00-百度| 欲香欲色综合天天伊人| 大香蕉在线视频15| 精品无码人妻一区二区免费蜜桃| 日本黄色天堂| 色色九区| 操逼操操操91| 亚洲啪啪视频一区二区| 在免费jIzzjIzz在线视频| 操逼操网| 另类在线| 日韩 欧美 校园一区| 嗯嗯,好大,好爽,好骚| 色月天AV导航| 国产乱伦亚洲| 人妻日日干| 精品亚洲国产成人AV制服丝袜| hd成人一区二区在线| 欧美疯狂做爰xxxx| 99热精品在线| 超碰97资源中文字幕| 国产老熟女| 欧美 亚洲 大香| 校园春色综合| 狠狠综合网| 熟女丝袜视频| JuliaAnnXXX888| 午夜福利一区二区三区四区五区色婷婷| 国产超碰欧美| 久久中文字幕不卡人妻| 精品99999| 日婷婷| 综合久久久久久久综合网| 综合影视国产无码| www.狠狠| 欧亚韩国999| 五月天欧美色图| 91亚洲影视| 翔田千里Av在线| 国产女性无套 免费观看| 性爱综合网| 9久9久9久9久视频网站| 91精品老女人| 亚洲国产一区二区入口| 欧美日韩理论一区| 色综合网1| 人人天天干干| 日韩精品人妻中文字幕久久久| 91美女高潮| 欧美牲| 91在线超高颜值国产| 综合色啪| 啊啊啊好大好湿| 欧美后入式| 我要去看2个日本美女.com曹逼| 亚洲天堂在线怕怕视频 | 91成人久久| 欧美日韩国产中文超碰| 91综合天天看| 久久69精品久久久久久久| 五月婷婷激情网| 99热久| 老妇女91| 97爱b| 九九九热| 一区,二区,三区视频| 99色在线| 国产精品久久久久无码A√| 天天色黄色影院天天操| 中文字幕乱碼在线| 久久九九精品一区二区| 大香蕉男女超碰精品在线| 老子午夜伦不卡影院| JULIA一区二区三区在线播放| 99re这里只有精品3| 国产精品熟女九色九色蜜臀| 黄aaaaaaaaaaaaaaaaaa色网站| 日本超碰97日韩精品人妻| 欧美色图91| 在线观看国产黄色| 久久啊哟| 成全动漫视频观看免费下载| 九九热男人天堂| 97超碰国产亚洲精品| 三级日韩一区二区三区| 中字乱伦AV| 成人欧美日超碰| 曰韩操B| 蜜桃久久久久久久久久久久| 91社操逼| 我爱操| 99热综合| 91久久久亚洲| 美欧色综合| 欧美日韩另类在线播放| 狠插 制服 自拍| 亚洲欧美综合| 天美传媒一二三区永久网站| 超碰人妻久久| 97精品一二区| suv精产一二三区| 九九热九九| 69一区二区三区| julia ann久久| 国产白丝精品在线观看| 久久欧美按摩999| 美女t无毒不卡不卡| 五月天婷精品激情| 久久久久九九九九九| 久久久精品成人国产| 蜜桃臀久久| 一区二区三区男女操逼黄色小电影| www.久久| 日韩欧美性爱电影在线观看| 人妻少妇精品一区二区三区| 毛片久久| 神马久久久久久久久久久久| 日韩精品三区四区| 91精品国产91久久福利| 欧美日韩制服| 熟妇人妻一区二区三在线| 色天堂综合| 香蕉国产精品麻豆亚洲欧美日韩| 伊人aaa| 日韩一级特黄av毛片| 亚州高清av| 国产美女高潮叫床视频| 91在线国产后入风骚翘臀美女素人| 一区二区视频在线播放| 超碰色大香蕉| 96AV精品| 色黄污美女啪啪啪免费网站| 亚洲日韩乱码中文无码蜜桃臀网站 | HEYZO高无码国产精品227| 丰满人妻-区二区三区免费看 | 亚洲激情色片| 青青草天天亲夜夜操网| 91性网| 久久久久久日韩| 色伊人91| 超碰精品日韩欧美国产| 色大香蕉97N| 91这里只有精品| 久久99精品九九久久久婷婷| 久久久久13| 亚洲国产成人7777| 亚洲av热热色| 欧美一级黄色18片免费看| 亚91网| 日韩久久超碰色| 人妻系列无码专区中文有码| 快播久久人人aV| 97爱免费插| 日韩精品碰碰| 亚洲天天操| 日韩午夜国产| 天天做天天爽| 可以在线观看的黄色网址| 四虎影视 亚洲无码| 亚洲欧洲小说图片视频 | 超碰国产精品无码| 国产尤物在线三区| 国产大片精久久久久久| 国内三级自拍小视频在线观看 | 东京热99999| 亚洲91射| 懂色AV一区二区三区| 中文字幕一区二区日韩网| 夜夜精品视频一区二区| 欧美日韩黄色片一区二区三区四区人与兽做爱 | 少妇免费视频| 国产一级αv免费看片| 九九九九免费| 玖玖大干人妻| 国产精品探花色| 欧美性夜| 欧美性爱第1 页| 欧美超碰在线| 欧美天天干| 国产美女销魂在线观看不卡| 操逼片中文| 国产高清成人传媒影视| 思思热在线视频精品| 色狠狠综合| 亚洲av无码成人精品国产| 日韩免费性爱视频在线观看| 另类小说五月天| 久久久A∨| 伊人久久88国产女| 不卡九肏| 午夜福利区| 啊啊啊啊啊啊啊在线| 天天插天天操天天摸天天射天天看| 超碰97最新人妻| 人妻黑丝袜电影| 肉丝中文无码高清| 美女网站91| 四虎国产精品永久在线囯在线 | 国桃视频产巨乳精品一区二区在线| 精品国产网站| 欧美加勒比| 精品一久久久| 色欲日韩欧美在线一区| 日本日逼视频网| 欧美亚洲综合色| 麻豆久久久久久久久丝袜 | 老司机午夜精品福利视频一区二区| 超碰97在线色男人??| 二级毛片| 看全色黄大色大片免费视频| 收看日本人日bb| 96久久精品一二三区色欲| 狠狠综合| 久久中文色图| 97se亚洲综合自| 成人小说视频在线精品欧美| 国产精品岛国片在线观看| 中文字幕五区| 风月影院男女十八禁| 清纯唯美激情| 韩国一级AAA| 五月天激情小说| 大香蕉色网| 91情色在线| 日韩高清黄片| 天天射,天天操,天天爽-国内精品一区二区三区-成人AV | 男人天堂新| 亚洲国产精品9999在线观看| 91在线页| 校园春色 亚洲| 日韩黄色片子| 丰满翘臀美女影院视频| 超碰偷拍| 国产熟女乱论| 午夜天堂精品久久| 国产久久久久久| 欧美一区二区三区蜜桃| 亚洲情色在线| 欧美天天| 五月婷婷综合在线| 999久久芭蕾| 91香蕉视频在线观看免费| 日本三级中国三级99人妇网站| 国产精品久久久久久久久久久久久久久久久久| 91宗合网| 日本九九九九| 快播久久人人aV| 91精品女厕偷拍视频| 伊人97色天使| 91国产操逼视频| 大屁股xxxxx| 精品无码久久久久| 日韩极品无码B| 欧美日韩免费专区在线| 狠狠干91| 国产suv精品一区二区四区999| 亚洲双插| 色色色999| 在线洲亚线| 秋霞一级视频在线观看免费| 欧美中字不卡| 家庭乱伦性爱av| 丝袜美女诱惑 91 视频| 亚洲精品无码久久AV| 青青操在线亚洲视频观看欧美在线| 97欧美综合| 久久色人体| 91老司机在线| 视频在线观看一二三区| 综合av社区| 老汉网| 免费观看性欧美一级| 亚洲欧美综合色| 日本淫乱女一区二区三区视频| 人妻碰碰碰碰碰碰| 中文字幕丰满人妻日本| 丰满人妻一区二区三区在线| 在线视频 亚洲精品| 大香蕉 222| 亚洲国产av中文字幕久久| 操b网站亚洲无码| 午夜性刺激视频免费观看| 久jiu久神马影院| 日本性感人妻91| 欲色影视综合吧| 偷拍亚洲熟女视频播放| 91黑丝操| 91大学精品激情戏| 韩日色费| 东北操逼| 高清不卡国产| 少妇熟女1区2区3区| 成人久久精品| 欧洲熟妇xxXx欧美老妇裸体| 人妻精品一区二区| 国产久久一区二区三区野外在线| 精品偷拍13p欧美dodk视频| 后入式五六区| 熟女人妻av在线资源,黄色的资源| 最新亚洲黄色免费电影| 亚洲素人网| 欧美日韩操逼动图| 欧美se综合| 日韩一999精品| 久久亚洲AV无码专区首页| 蜜桃狠狠色伊人亚洲综合 | 一类无码操逼视频| 欧美熟妇精品黑人巨大91| 一区二区三区四区色图| 亚洲精品性爱片| 夜夜高潮夜夜爽国产伦精品| 色噜噜人妻av 中文字幕| 欧美午夜视频免费观看| 加勒比99999| 黑丝日韩av丝袜av| 亚洲.欧美.丝袜.中文.综合| 91搞逼视频| 欧美热图99| 99热在线不卡| 超碰人人妻| 日韩精品资源专区二区| 欧美色91| 欧美 日韩 国产传媒| a级成人毛片免费视频高清| 探花精品 一区二区| 激情四射婷婷六月天| 久久综合18p| 黄色欧美性爱视频| 日韩中文字幕精品一区在线| 亚洲视频精选| 色综九九九一区| 久久綜合很很很| 99热综合| 精品国产肉丝袜在线拍国语| 国内亚洲精彩视频在线| 婷婷人妻激情| 99re在线视频这里只有精品| 99在线视频播放| 久久啊哟| 国产精品白虎| 大香蕉五月天婷婷| 免费强奸av| 第四色奇米影视777| 欧美色图91| 狠狠躁久久躁| 精久久久| 人妻 欧美亚洲| 韩国女主播青草在线| 国产成人www免费人成看片| 乱伦一区二区三区‘| 久午视频| 78m啪啪啪| 91色伦| 久操视频免费观看| 天天天天做夜夜夜夜做| 超硑97精品| 精品久久久无码| 亚洲第一综合| 五月天婷婷成人网| 亚洲精品视频二区| 超碰亚洲97| 中文字幕第页| WWW4虎| 99re6国产精品99re在线| 久久久久成人蜜桃精品| 麻豆天美久久91| 亚洲午夜免费狠狠干| 亚洲啪啪性视频| 岛国精品视频在线观看| 91操人视频| 九九内射在线| 日韩av乱伦| 色综合色色| 欧美日综合| 久久久一级| 极品五月天噜噜| 欧日韩不卡视.频| 日韩偷拍色图| 欧美日韩免费专区在线| 久草男人天堂| 999色欧美中文字幕| 少好三P| 99re99在线视频| 国产成人五月天丁香花| 天天综合中文字幕 91| 亚洲天堂精品日韩电影| 日韩簧片免费看| 国产熟女乱论| 五月婷婷丁香六月| n1038 一二三区| 亚洲性综合| 91精品人妻一品二品三品| 九九九九热只有精品| 91亚洲网| 乱论91| 激情深爱五月天| 成年男人的天堂| 色婷婷淫色网| 91日韩网站| www久久国产精品| 中文字幕交换人妻| 色97| 91超碰在线播放| 人妻丝袜一区二区三区在线| 黄色操人| 欧美人妻一区| 91在线美女| 人人搡人人肉久久精品| 亚洲毛片久久| 欧美日日操| av在线资源| 综合亚洲情色| 久久久久久九九九| 无码av永久免费专区网站| 九九热超碰| 日本最新免费韩国1区2区视频播放| 超碰在线日韩一区| 翔田千里无码中出中文字幕| 婷婷在线视频| 国产99999久久精品| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 亚洲天堂久| 日本一区二区亚洲综合| 欧美性爱在线无码| 亚洲自拍一区夜夜操| 国产熟女无套内射| 国产精品久久久久无码AV会牛| 嗯啊啊啊轻点视频 | 欧美性第1页| 午夜成人爽爽爽爽A片李冰冰| 亚洲成熟国产精品美女| 精品小视频在线| 熟妇人妻精品一区二区| Blackedraw视频一区二区| 亚洲男人天堂网久久| 日本在线伊人啪啪| 日韩探花精品在线视频| 日日夜夜国产综合| 国产黄色剧情影片麻豆免费播放| 五月婷婷综合激情| 精品二区三四区五电影 | 国内三级自拍小视频在线观看 | 另类专区在线观看| 日本加勒比无码专区一二三| 777AV电影| 有码人妻系列| 人人爱人人乐人人操| 国模一区二区三区| 亚洲天堂精品日韩电影| 宅男91视频在线播放| 最新亚洲黄色免费电影| 夜夜操av亚洲一区二区| 国产成年女黄特黄| 亚州伊人色综台| 中出欧美| 色妺妺在线视频| AV中亚| 日韩一级二级| 亚洲丝袜少妇在线| 五月天婷婷激情| 96超碰网| www四虎| 天天看天天日天天操| 亚洲激情综合| 啊啊啊免费| 日本超碰在线国产一区| 免费试看60秒| 亚洲男人天堂2012| 很很操在线| 330Dv国产女人终合视频极品人与兽| 欧美性爽xyxOOOO| 麻豆天美国美国产AV| 欧美超碰在线| 99 国产丝袜在线| 人人模人人看| 亚洲老司机123专区| 亚洲最新av无码成人精品区| 午夜视频久久久| 丁香五月天啪啪| 在线97视频| 欧美 青青草| 亚洲日韩美女中文字幕乱| 夜夜做夜夜爽精品视频| 黄片com.| 青草精品视频日本久久久久网站在线| 久久久久精| 国产亚洲精品无码三区| 狠狠操狠狠燥| 六六久久日韩不卡| 伊人久久综合影院精品久久久 | 精品夜夜澡人妻无码| 亚欧性爱无码| 久久久日本电影| 隔壁邻居波多野结衣中文字幕 | 最新亚洲黄色免费电影 | 91亚州日韩高清| 欧美人妻久久精品二区三区 | 国产乱不卡| 嫩草 人人网精品| 伊人五月天| 免费福利视频中文字幕| 本道在线| 久久久久久久78| 五月婷婷六月色| 国产欧美日韩一区二区三区| 美女91| 久久久久久久久久久久久女过产乱-少妇高潮一区二区三区喷水-成人AV | 精品午夜福利导航| 俺去啦自拍| 九九亚洲精品| 后X久久| 国产精品成人无码av| 一个色导综合| 亚洲色天| 丰满人妻-区二区三区免费看| 五月开心久久AV官网| 台湾佬中文娱乐自偷自拍| 色爱国产| 国产又粗又长又爽又色| 成人免费看吃奶视频网站| 久久东京热久久| 国产精品另类一区大香蕉| 日本超碰97日韩精品人妻| 天美国产三级传媒| 色播五月丁香| 韩国一级婬片A片AAAAA| 日韩乱伦影音先锋| 吖在线不卡一区二区国产剧情| 大学生美女口爆| 老熟妇91| 丰满人妻一区二区三区免费 | 精品女同一区| 久久超碰av在线| 330dv亚洲成年视频网| 欧美天天综| 久久久久久性爱片| 欧美天天插| 欧美九9 9 9| 中文字幕成人| 91丨九色丨东北熟女| 天美麻花大全视频| 去干网最新版| 无码伊人久久大杳蕉中文无码| 亚洲AV无码黄色强奸| 色狠狠 - 百度| 精品久久久久久中文| 国产熟女完整版中字| 精品欧美А∨无码黑人大荫蒂| 日B操| 国产精品ⅴ无码大片在线看.| 日本成熟少妇A∨网站| 亚洲熟伦熟妇AV无码春色| 另类亚洲一区二区三区| 免费αV在线视频| 人人做,人人操,人人摸| 亚洲欧美综合区自拍另类 | 91狠狠| 97超碰磁| 性色av蜜臀av色欲aV| 久久亚洲AV成人精品无码| 大色综合网| 欧美中出1| 91婷婷| 无码免费一区二区三区啪啪| 九九九久千久久激情蜜桃在线看 | 午夜免费视频1000| 四虎永久在线精品免费网址| 欧美白嫩在线放| 亚洲性少妇| 神马久久久久久久久| 日韩精品-原创伙伴| 思思久热在线精品66| 飘花国产午夜精品不卡| 欧美性爱视频免费一区一A| 久久曰曰| 午夜天堂网| 国产91专区| 欧美少妇人妻| 国产精品久久久久久照片| 国产 三级自拍| 国产黄a三级三级三级av在线看| 人人摸人人干| 熟女露脸激情自拍视频| 伊人久久AV诱惑悠悠| 欧美的性爱网站免费| 99精品久久久久久久婷婷| 夂久色| 蜜桃久久久久久久久久久久| 88在线一区二区三区| 亚洲无线观看久久| 艹少妇网站| 天天欧美欧美亚洲网| 传媒免费一区二区三区| 九九九精品美女| 国产性爱在线视频一区二区| 久久五月视频| 91美女在线视频| 蜜臀久久99精品久久久久久酒店| 国产强奸91| 五月婷婷丁香| 中文日韩欧美熟| 老司机福利青青草| 美女被艹尤物视频| 成人日韩中文字幕| 奶水 人妻 哺乳 在线| 国产乱色国产精品免费视| 97人人干| 少妇高潮喷水无套久久久久久| 国产v亚洲v日韩v欧美v片另类| 国产亚洲精品玖玖玖在线观看| 国产在线不卡导航| 亚洲图片 欧美电影| 亚洲伊人a线观看视频| 夜夜操2028| 色香91| 婷婷在线视频在线观看| 六九九九| 男人的天堂Va| 亚洲欧美日韩精品久| 久久亚洲天天做| 97干在线| 天天爱天天韩国日本牛牛牛牛| 久久精品91| 成在线人在线观看视频| 91视频观看网站| 好吊色综合| 欧美一级黄片免费播放| 老司机午夜精品福利视频一区二区| 思思热在线视频在线| www.狠狠干.coom | 春色综合网| 91色久| 嗯~啊~轻一点 视频| 日韩欧美综合激情| 欧美亚洲涩涩| 男女激烈网站最新| 欧美午夜色妇色鬼| 偷拍偷窥与盗摄视频专区| 精品超碰中文在线| 久久伊人影院| 超碰国产在线| 91色欧美| 九九热精品| 亚洲资源一区| 九九热在线视频| 91美女片在线| 久久五月份| 天天干电影| 亚洲情色第一页| 久久久无码视频| 蜜臀久久99精品久久久老,,| 神马久久久久久| 天天淫人人妻日日色| 粉嫩av在线| 天天摸夜夜摸| 老子午夜伦不卡影院| 高潮嗯啊性感美女久久久| 国产精品熟女九色九色蜜臀| 亚洲男人天堂2013| 日本女优在线视频福利| 小电影欧美91| 色老汉玖玖爱| 欧美成熟性爱精品| 制服诱惑亚洲一区二区三区在线观看| 色欲蜜臀AV| 日韩无码服务区| www.婷婷| 人人操人人舒服| 天综合网欧美| 六月激情婷婷| 懂色Av| 超碰在线97国产| 亚洲日韩成人性爱视频| 免费在线视频97| 亚洲不卡av在线| 国产精品美女久久久久AⅤ国产馆| 久久高清无码夜夜操| 五月婷婷啪啪| 精品无码一区二区三区色欲| 日本999精品| 91精品久久久久久77777| 亚洲精品97| 97超碰巨乳| 九九久久精品| 男女日B国产| 超碰到97情色| 91国产精品熟女| 黄色电影在线播放综合网站| 亚洲狠狠入| 97超碰天天爱天天爱| 久久久国产亚洲精品系列| 婷婷丁香人妻| 成人五月天色网| 人妻22p| 亚洲性爱成人| 人妻丰满熟妇av无码区蜜桃| 加勒比在线视频| 最新日产中文在线麻豆| 啊啊啊啊啊啊在线观看| 东京热不卡视频| 欧美性猛交美女自慰91| 色色福利| 成人免费性爱视视| 亚洲第一页综合在线| 久久熟妇五十路一区| 中文字幕 国产 精品| 亚洲日韩在线a不卡99精品| 五月天精品| 欧美综合在线91| 亚洲高潮少妇| 一个人免费HD91视频| 蜜乳中文字幕a在线| 91亚洲最新在线| 裸体1区| 嗯嗯啊啊操死我| 亚洲色欲天天人妻无码系列专区| 日本黄大片在线观看视频| 亚洲 欧美 第一页| 亚洲精品一区二区免费在线观看| 熟女啪啪视频| 91丨九色丨国产打屁股| 黄片aaaaa一区| 国产亚洲日韩欧| 国产精品一区二区密臀| 校园春色家庭伦理欧美激情| 四虎国产成人精品免费一女五男| 日日夜夜天天| 欧美精品自慰系列寂寞少妇| 温婉少妇玩3p| 人人操人人操人人人操| 日韩无码一级黄色av片| 97天天| 亚洲天天自拍| 高潮9999外国| 日韩av情韩国爱禁区av一区二区| 97精品久久久久久久| 色噜噜国产在线| 91 手机在线播放 绯色| 色色激情五月天| 日欧操屄视频| 熟女突然公开看18禁影片 | 亚洲无码超碰免费| 日韩大香蕉| 亚洲成人贴图| 天天色欧美| 91n欧美| 天天爱天天操| 偷拍视频青青草在线视频| 九九九国产精品| 四虎影视国产精品| 97伊人超碰| 亚洲日韩狠狠撸视频| 欧美淫乱视频| 91操熟女视频| 欧美色图20P| 亚洲第一视频 欧美风情 日韩| 免费精品AB| 97国产精品在线观看| 亚洲资源吧| 大香蕉草草| 亚州色综合| 色欲av国内精品久久久久久| 翔田千里AV无码秘 三区| 91综合色噜噜| www.久久制服糖| 岛国视频一二三区| 欧美色视频在线| 精品中文字幕一区二区l - 百度| 欧美性爱视频免费一区一A| 国产1769在线| 99热伊人| 欧洲综合视频| 久草婷婷| 97欧美久久久久久久| 国产精品九9| 久久香蕉国产传媒一区剧情天美| 精品久久在线区一区| 欧美一区二区一级岛国大片| 超碰97在线中文| 超碰成人公开| 日韩欧美亚洲自拍偷拍| 日韩欧美亚欧在线视频| 亚洲精品性爱片| 九九探花视频在线观看| 日本三级大片| 91丝袜美腿网站| 涩涩久久精品| 久久日韩肥臀| 日韩国产精品人妻无码久久久| 91深夜夜| 九九无码| AV丝袜少妇| 青青草导航在线视频| 亚洲有码视频二区| 最新亚洲人成网站在线影院| www.色操逼| 久久久9品一区二区三区| AV99热18这里只有精品| 欧美人妖内射| 伊人丁香五月婷婷| 中文字幕一区二区三区视频播放| 久热69九色熟妇97| 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | 四季av一区二区凹凸精品小说| 97精品网| 人人摸人人干人人拍97| 九九九九九九九九九九九免费国产| 神马久久69| 国产精品剧情| 欧美三级中文字幕hd| 香一区二区三区| 深夜激情| 亚洲图片婷婷五月天| 五月天色图影视| 四虎在线观看网站| 在线日韩日本亚洲国产| 国产情侣自拍在线播放| 97爱亚洲综合色| 99re视频这里只有精品| 综合免费无码中文| 丝袜制服字幕在线| 欧美日韩中文字幕不卡| 男人天堂黄片| 亚洲精品丝袜| 欧色网址| 一区二区三区精品视频| 精品久久久久久久久久久久| 78久久| 免费看日本操逼视频| 久久久专区| 日韩福利综合一区| 蜜桃久久综合视频| 欧洲站一级二级三级h| 影音先锋日本一区二区| 精品久久久九九九孕妇| 午夜经典| 无码视频黄色网战| 日韩资源网| av中文在线| 污电影在线观看| 黄色片一区二区三区四区五区| 青青草九九九九九| 久热伊人| 婷婷五月天成人网| 极品一区二区三区免费| 日本免费专区| 嗯嗯啊啊好疼| 日本性交操一区二区不卡系列| 国产精品91一样| 香蕉综合网| 熟女人妻久久中文字幕一二区| 欧洲一区二区| 色官网在线| 天操天操夜操夜月月年年操操| 黄色AAAAA欧美| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 又黄又硬又粗又长国产视频| 久久99午夜精品一区人妻| 天天操天天7| 丝袜美腿制服人妻二区中文字幕| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 日本人体九九九九九九| 久久系列| 偷拍欧美综合| 无码人妻精品酒店| 99re6久热只有精品6在线直播| 亚洲精品97| 91九色丨国产丨爆乳| a片久久久久久久久久久久 | 久草老司机| 白嫩国模丰满一二三区| 精品少妇一区二区三区| 亚洲啪啪性视频| 欧美 色 亚洲| 色综合91| 成人无码在线超碰网| 91真人天天在线| 久久久久国产精品喷潮免费观看臀| 精品一区二区久久| 五月天激情影院| 欧美精品庄| 天天看少妇| 91成人高清在线观看| 精品无码久久久久| 天天日天天干天天整| 日产精品久久久一区二区| 草草影院在线视频| 精品蜜乳AV免费观看| 欧美91精彩| 国产乱伦性爱AV| 亚洲色图91| 中 文字幕一区二区三四 五 区日 日 骚 | 国产白丝精品在线观看| 97色97好| 色yeye成人免费视频| 97神马久久| 天天摸夜夜摸| 97人妻免费中文字幕| 久久精品导航| 人人操天天爽| 一区二区三区四区免费视频| 一二三区视频在线观看| 国产人伦精品一区二区三区| 95自拍视频在线观看| 97伦综合| 九九热超碰97亚洲最新香蕉| 国产精品蜜乳AV| 91综合熟女| 日韩无码久久熟女一级片| 日欧操屄视频| 成人av毛片在线观看| 久久久久久九九九九九九| 国产精品交换一区二区| 亚洲另类小说卡通动漫| 夜夜春夜夜操| 婷婷激情一区二区三区俺也去| 亚洲超碰AV| 东京热一区二区中文字幕| 天天躁夜夜躁狠狠躁AV| oumeisetu综合| 色综合久久88色综合久久天天| 九热中文字幕| 久久精品成人一区二区三区蜜臀| 欧美日韩99精品麻豆传媒| 精品人妻一区| 免费a v| 日本二区不卡| 999 久久久| 亚州操操穴网| 去干网最新版| 午夜一级免费毛片| 亚洲全色网| 日韩欧美天堂| 日日A∨| 999狠狠综合| 亚洲最大AV网| 中国AV美女| 国产白丝av| 精品人妻一区二区三区蜜桃视频| 97青娱乐超碰久久| 欧美性猛交美女自慰91| 户外裸露刺激视频第一区| 欧美传媒| 青青草国产欧美非洲黑人| 久射吧| 欧洲自拍色图gif在线| 天天综合网91入口| 九九热精品| 欧美网站免费| 欧美日韩亚洲一区二区在线观看| 国产老太乱伦一区| 亚洲成成熟女人综合一区二区| 激情情色五月天| 亚洲国内精品成人不卡| 色九九九| 18一区二区三区| 不卡在线一区,精品一区二区三区中| 亚洲日韩国产欧美综合v| 亚洲图片婷婷五月天| 亚洲无码 国产无码| 91综合站| 超碰色图| 精品传媒在线一区| 欧美日韩亚洲少妇寂寞影院正在播放 | 影音先锋国产精品| 亚洲制服欧美另类内射| 亚洲欧美自拍偷拍| 免费自拍三级综合| 92性色国产午夜福利在线661| 亚洲综合另类| 超碰97人妻在线| 久草加勒比一区在线| 国产精品96久久久久久| 91成人无码| 亚洲欧美人妻| 欧美少妇色图| 操碰97| 美女裸体无遮挡永久免费观看网站| 日韩一级二级三级免费看完整版| 韩国一级做a久久久久| 欧亚日韩一区在线| 九九九精品| 亚洲在线网站| 国产在线观看91精品一区| 欧美一级美片在线观看免费| 天天干天天燥| 久久综合亚洲色1080p| 亚洲最新av无码成人精品区 | 人人操我人人干| 性色生活片久久毛片婬片免费放女人一级毛片 | 最新无码国产| 熟女久久久| 偷偷人人精品女女久久| 国产精品一区二区三区免费视频| 舔足天天操天天射| 国产精品com| 欧美黄色大片在线观看 | 国产 热久久久久国产精品| 岛园激情| 欧美午夜精品久久久久久3D| 亚洲AV免费在线观看| 亚洲 欧美 另类 日韩 人妻一区| 啊啊啊啊好疼视频| 天天操妹子| 乱伦一二三区| 国产区性爱在线视频秋霞豆| 大香网伊人久久综合| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 青青草色AV| 久久久无码视频| 欧美性爱无码一区二区三区| 一本一道vs波多野结衣| 婷婷五月综合激情| 一个人在线看的黄色电影网站| 91综合国产精品| 婷婷性网| 国产精品日韩在线一区| 国产激情av女片自拍| 日韩草久视频| 欧美亚洲涩涩| 91bbbbbb| 日本一级婬片试看三分钟| 日韩无码专区| 香港日本韩国人妇99www.wccm20| 色欲久久99精品久久|