日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

无向图——双连通分量

發(fā)布時(shí)間:2025/6/15 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 无向图——双连通分量 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

? ? 雙連通圖:在無向圖連通圖中,如果刪除該圖中的任意一點(diǎn)和依附它的邊,不改變圖的連通性,則稱該圖為雙連通的無向圖。

??? 由上述定義可知,雙連通分量中,每?jī)蓚€(gè)結(jié)點(diǎn)之間至少有兩條不同的路徑可以相互到達(dá)。

??? 割點(diǎn):在無向連通圖中刪去某個(gè)點(diǎn)a和依附a的邊,圖變?yōu)椴贿B通,則該點(diǎn)稱為割點(diǎn),也叫關(guān)節(jié)點(diǎn)。

??? 割邊:在無向連通圖中刪去某條邊,圖變?yōu)椴贿B通,則該邊稱為割邊,也叫橋。

??? 點(diǎn)雙連通分支(塊)與邊雙連通分支:

點(diǎn)雙連通分支與邊雙連通分支是兩個(gè)完全不同的概念。割點(diǎn)可以存在多個(gè)點(diǎn)連通分支中(相反,橋就不一樣)。一個(gè)圖可以有割點(diǎn)而沒有割邊,也可以有割邊而沒有割點(diǎn)。

?

點(diǎn)雙連通分支的求法和邊雙連通分支的求法類似,不過在出棧的地方有些不同。下面介紹幾個(gè)例子。

?

POJ3177(3352)

題目大意:最少需要加多少條邊使得原圖變?yōu)殡p連通圖(原圖連通)。

解:求橋(注意平行邊),在求橋的過程中縮點(diǎn),利用并查集,將每個(gè)連通分量用一個(gè)點(diǎn)代表。將這些代表用橋連接起來,就構(gòu)成了一顆樹。統(tǒng)計(jì)樹中度數(shù)為1的點(diǎn)(即葉子結(jié)點(diǎn))的個(gè)數(shù)count,將葉子結(jié)點(diǎn)兩兩相連,則添加邊的數(shù)量為(count+1)/2。

Cpp代碼??
  • #include?<iostream>??
  • const?int?MAX?=?5002;??
  • ??
  • int?p[MAX];??
  • struct?Graph??
  • {??
  • ????int?to;??
  • ????int?next;??
  • }e[MAX*4];??
  • int?index[MAX];??
  • int?edgeNum;??
  • int?seq;??
  • ??
  • int?low[MAX];???????//low[u]表示在樹中從u點(diǎn)出發(fā),經(jīng)過一條其后代組成的路徑和回退邊,所能到達(dá)的最小深度的頂點(diǎn)標(biāo)號(hào)??
  • int?dfn[MAX];???????//dfn[u]表示結(jié)點(diǎn)u在樹中的編號(hào)??
  • int?bridge[MAX][2],bridge_n;??
  • int?degree[MAX];??
  • int?n,m;??
  • ??
  • int?min(int?x,?int?y)??
  • {??
  • ????return?x?<?y???x?:?y;??
  • }??
  • ??
  • void?makeSet()??
  • {??
  • ????for(int?i?=?1;?i?<=?n;?i++)??
  • ????????p[i]?=?i;??
  • }??
  • ??
  • int?findSet(int?x)??
  • {??
  • ????if(x?!=?p[x])??
  • ????????p[x]?=?findSet(p[x]);??
  • ????return?p[x];??
  • }??
  • ??
  • void?Union(int?x,?int?y)??
  • {??
  • ????x?=?findSet(x);??
  • ????y?=?findSet(y);??
  • ????if(x?==?y)??
  • ????????return;??
  • ????p[y]?=?x;??
  • }??
  • ??
  • void?addEdge(int?from,?int?to)??
  • {??
  • ????e[edgeNum].to?=?to;??
  • ????e[edgeNum].next?=?index[from];??
  • ????index[from]?=?edgeNum++;??
  • ????e[edgeNum].to?=?from;??
  • ????e[edgeNum].next?=?index[to];??
  • ????index[to]?=?edgeNum++;??
  • }??
  • ??
  • //邊連通分量,求橋??
  • void?bridge_dfs(int?u,?int?v)??
  • {??
  • ????int?repeat?=?0;?????????????????//有平行邊??
  • ????low[u]?=?dfn[u]?=?seq++;??
  • ????for(int?i?=?index[u];?i?!=?-1;?i?=?e[i].next)??
  • ????{??
  • ????????int?w?=?e[i].to;??
  • ????????if(w?==?v)??
  • ????????????repeat++;??
  • ????????if(dfn[w]?<?0)??
  • ????????{??
  • ????????????bridge_dfs(w,u);??
  • ????????????low[u]?=?min(low[u],low[w]);??
  • ????????????if(!(low[w]?>?dfn[u]))???????//不是橋,縮點(diǎn)??
  • ????????????{??
  • ????????????????Union(w,u);??
  • ????????????}??
  • ????????????else??
  • ????????????{??
  • ????????????????bridge[++bridge_n][0]?=?u;??
  • ????????????????bridge[bridge_n][1]?=?w;??
  • ????????????}??
  • ????????}??
  • ????????else?if(v?!=?w?||?repeat?!=?1)????//重要??
  • ????????????low[u]?=?min(low[u],dfn[w]);??
  • ????}??
  • }??
  • ??
  • int?solve()??
  • {??
  • ????int?i,j;??
  • ????int?a,b;??
  • ????int?count?=?0;??
  • ????memset(degree,0,sizeof(degree));??
  • ????for(i?=?1;?i?<=?bridge_n;?i++)??
  • ????{??
  • ????????a?=?findSet(bridge[i][0]);??
  • ????????b?=?findSet(bridge[i][1]);??
  • ????????degree[a]++;??
  • ????????degree[b]++;??
  • ????}??
  • ????for(i?=?1;?i?<=?n;?i++)??
  • ????????if(degree[i]?==?1)??
  • ????????????count++;??
  • ????return?(count+1)/2;??
  • }??
  • ??
  • int?main()??
  • {??
  • ????int?i,j;??
  • ????int?a,b;??
  • ????edgeNum?=?0;??
  • ????seq?=?0;??
  • ????bridge_n?=?0;??
  • ????memset(index,-1,sizeof(index));??
  • ????memset(dfn,-1,sizeof(dfn));??
  • ????scanf("%d?%d",&n,&m);??
  • ????for(i?=?0;?i?<?m;?i++)??
  • ????{??
  • ????????scanf("%d?%d",&a,&b);??
  • ????????addEdge(a,b);??
  • ????}??
  • ????makeSet();??
  • ????bridge_dfs(1,-1);??
  • ????printf("%d\n",solve());??
  • ????return?0;??
  • }??
  • ?

    POJ2942

    題目大意:有n個(gè)騎士,騎士一段時(shí)間要坐在圓桌上舉行高級(jí)會(huì)議,但要滿足條件:互相憎恨的騎士不能相鄰,圓桌上的人數(shù)必須是大于1的奇數(shù)。現(xiàn)在給出騎士之間的憎恨關(guān)系,問至少有多少個(gè)騎士要被排除在外。

    解:首先建補(bǔ)圖,這樣騎士a和騎士b之間有連線,說明a和b可以相鄰。還可以想到奇環(huán),不在任何奇環(huán)的騎士將被排除。問題是如何求圖中的奇環(huán)?這里有一個(gè)定理:雙連通分量中如果存在奇環(huán),那么整個(gè)分量的點(diǎn)全部包含在奇環(huán)中(自己體會(huì))。這樣,可以先求點(diǎn)的雙連通分量,判斷每個(gè)雙連通分量是否包含奇環(huán)(用染色,若相鄰點(diǎn)顏色相同,存在奇環(huán)),若存在奇環(huán),則該分量包含的騎士都不會(huì)被排除。

    Cpp代碼??
  • #include?<iostream>??
  • const?int?MAX?=?1001;??
  • int?n,m;??
  • //若某塊(雙連通分量)不可染色為二分圖,則該塊存在奇圈;若某塊存在奇圈,那么該塊中的所有點(diǎn)都存在與奇圈中;??
  • //那么答案就是所有不在任何奇圈中的騎士的個(gè)數(shù)。??
  • bool?map[MAX][MAX];??
  • int?dfn[MAX],low[MAX],stack[MAX];??
  • int?top,seq,result;??
  • bool?b[MAX],used[MAX];??
  • int?color[MAX];??
  • ??
  • int?min(int?x,?int?y)??
  • {??
  • ????return?x?<?y???x?:?y;??
  • }??
  • ??
  • bool?isOk(int?v,?int?col)??
  • {??
  • ????color[v]?=?col;??
  • ????for(int?w?=?1;?w?<=?n;?w++)??
  • ????{??
  • ????????if(map[v][w])??
  • ????????{??
  • ????????????if(b[w])??
  • ????????????{??
  • ????????????????if(color[v]?==?color[w])????//相鄰兩點(diǎn)顏色相同,構(gòu)不成二分圖,含奇圈??
  • ????????????????????return?true;??
  • ????????????????if(color[w]?==?-1)??
  • ????????????????????isOk(w,?col^1);??
  • ????????????}??
  • ????????}??
  • ????}??
  • ????return?false;??
  • }??
  • ??
  • void?dummy(int?t,?int?*a)??
  • {??
  • ????int?i,j;??
  • ????memset(b,0,sizeof(b));??//b[i]=1表示結(jié)點(diǎn)i屬于當(dāng)前的雙連通分量中??
  • ????for(i?=?0;?i?<?t;?i++)??
  • ????????b[a[i]]?=?true;??
  • ????for(i?=?0;?i?<?t;?i++)??
  • ????{??
  • ????????memset(color,-1,sizeof(color));??
  • ????????if(isOk(a[i],1))??
  • ????????????break;??
  • ????}??
  • ????if(i?<?t)????????//含奇圈??
  • ????{??
  • ????????for(j?=?0;?j?<?t;?j++)??
  • ????????{??
  • ????????????if(!used[a[j]])??
  • ????????????{??
  • ????????????????result++;??
  • ????????????????used[a[j]]?=?true;??
  • ????????????}??
  • ????????}??
  • ????}??
  • }??
  • ??
  • void?bicon(int?u)??
  • {??
  • ????int?a[MAX];??
  • ????low[u]?=?dfn[u]?=?seq++;??
  • ????stack[top]?=?u;??
  • ????top++;??
  • ????for(int?w?=?1;?w?<=?n;?w++)??
  • ????{??
  • ????????if(map[u][w])??
  • ????????{??
  • ????????????if(dfn[w]?<?0)???????????????????//第一種情況,w是新點(diǎn)??
  • ????????????{??
  • ????????????????bicon(w);??
  • ????????????????low[u]?=?min(low[u],low[w]);??
  • ????????????????if(low[w]?>=?dfn[u])?????//u割點(diǎn)(把割點(diǎn)留在棧中)???
  • ????????????????{??
  • ????????????????????int?k?=?1;??
  • ????????????????????a[0]?=?u;??
  • ????????????????????do??
  • ????????????????????{??
  • ????????????????????????--top;??
  • ????????????????????????a[k++]?=?stack[top];??
  • ????????????????????}while(stack[top]?!=?w);??
  • ????????????????????dummy(k,a);??
  • ????????????????}??
  • ????????????}??
  • ????????????else????????????????????//u,w是回邊(w是u的祖先)??
  • ????????????????low[u]?=?min(low[u],dfn[w]);??
  • ????????}??
  • ????}??
  • }??
  • ??
  • void?block()??
  • {??
  • ????for(int?i?=?1;?i?<=?n;?i++)??
  • ????????if(dfn[i]?<?0)??
  • ????????????bicon(i);??
  • }??
  • ??
  • int?main()??
  • {??
  • ????int?i,j;??
  • ????int?a,b;??
  • ????while(true)??
  • ????{??
  • ????????scanf("%d?%d",&n,&m);??
  • ????????if(n?==?0?&&?m?==?0)??
  • ????????????break;??
  • ????????memset(map,1,sizeof(map));??
  • ????????memset(dfn,-1,sizeof(dfn));??
  • ????????memset(used,0,sizeof(used));??
  • ????????seq?=?0;??
  • ????????top?=?0;??
  • ????????result?=?0;??
  • ????????for(i?=?0;?i?<?m;?i++)??
  • ????????{??
  • ????????????scanf("%d?%d",&a,&b);??
  • ????????????map[a][b]?=?false;??
  • ????????????map[b][a]?=?false;??
  • ????????}??
  • ????????for(i?=?1;?i?<=?n;?i++)??
  • ????????????map[i][i]?=?false;??
  • ????????block();??
  • ????????printf("%d\n",n?-?result);??
  • ????}??
  • ????return?0;??
  • }??
  • ?

    POJ3694

    題目大意:給定一個(gè)初始的網(wǎng)絡(luò),每次(1000次)向網(wǎng)絡(luò)里加一條邊,問網(wǎng)絡(luò)中橋的數(shù)量。(網(wǎng)絡(luò)是動(dòng)態(tài)的)

    解:這題難就難在網(wǎng)絡(luò)是動(dòng)態(tài)的,如果是靜態(tài),可以用邊的雙連通分量來直接求解。簡(jiǎn)單的想法是每修改一次就重新計(jì)算一次,但是這樣超時(shí)。聯(lián)想:通過縮點(diǎn),縮點(diǎn)之間用橋連接,形成一顆樹,樹邊就是橋,橋的總數(shù)為sum。每次向網(wǎng)絡(luò)里加一條邊a,b,先用并查集找出a和b所屬的樹的結(jié)點(diǎn),顯然,a和b到ab的最近公共祖先這條路徑上的橋全部無效。這樣,每次只需在樹上操作sum--。這樣復(fù)雜度就降下來了。

    Cpp代碼??
  • #include?<iostream>??
  • const?int?MAX?=?100002;??
  • int?n,m;??
  • int?result;??
  • struct?Edge??
  • {??
  • ????int?to;??
  • ????int?next;??
  • }e[MAX*10],tree[MAX*10];??
  • int?index[MAX],index2[MAX],edgeNum,edgeT;??
  • int?seq;??
  • ??
  • int?low[MAX],dfn[MAX];??
  • int?p[MAX],res[MAX];??
  • int?level[MAX],pre[MAX];??
  • bool?vis[MAX],bridge[MAX];??
  • ??
  • int?min(int?x,?int?y)??
  • {??
  • ????return?x?<?y???x?:?y;??
  • }??
  • ??
  • void?addEdge(int?from,?int?to)??
  • {??
  • ????e[edgeNum].to?=?to;??
  • ????e[edgeNum].next?=?index[from];??
  • ????index[from]?=?edgeNum++;??
  • }??
  • ??
  • void?addTree(int?from,?int?to)??
  • {??
  • ????tree[edgeT].to?=?to;??
  • ????tree[edgeT].next?=?index2[from];??
  • ????index2[from]?=?edgeT++;??
  • }??
  • ??
  • void?makeSet()??
  • {??
  • ????for(int?i?=?1;?i?<=?n;?i++)??
  • ????????p[i]?=?i;??
  • }??
  • ??
  • int?findSet(int?x)??
  • {??
  • ????if(x?!=?p[x])??
  • ????????p[x]?=?findSet(p[x]);??
  • ????return?p[x];??
  • }??
  • ??
  • void?Union(int?x,?int?y)??
  • {??
  • ????x?=?findSet(x);??
  • ????y?=?findSet(y);??
  • ????if(x?==?y)??
  • ????????return;??
  • ????p[x]?=?y;??
  • }??
  • ??
  • void?bridge_dfs(int?u,?int?v)??
  • {??
  • ????int?repeat?=?0;??
  • ????low[u]?=?dfn[u]?=?seq++;??
  • ????for(int?i?=?index[u];?i?!=?-1;?i?=?e[i].next)??
  • ????{??
  • ????????int?w?=?e[i].to;??
  • ????????if(v?==?w)??
  • ????????????repeat++;??
  • ????????if(dfn[w]?<?0)??
  • ????????{??
  • ????????????bridge_dfs(w,u);??
  • ????????????low[u]?=?min(low[u],low[w]);??
  • ????????????if(low[w]?>?dfn[u])??
  • ????????????{??
  • ????????????????result++;??
  • ????????????????res[result]?=?i;??
  • ????????????????//bridge[w]?=?1;??
  • ????????????}??
  • ????????????else??
  • ????????????????Union(w,u);??
  • ????????}??
  • ????????else?if(v?!=?w?||?repeat?!=?1)??
  • ????????????low[u]?=?min(low[u],dfn[w]);??
  • ????}??
  • }??
  • ??
  • void?lca_dfs(int?u,?int?deep)??
  • {??
  • ????for(int?i?=?index2[u];?i?!=?-1;?i?=?tree[i].next)??
  • ????{??
  • ????????int?v?=?tree[i].to;??
  • ????????if(!vis[v])??
  • ????????{??
  • ????????????vis[v]?=?true;??
  • ????????????pre[v]?=?u;??
  • ????????????level[v]?=?deep+1;??
  • ????????????lca_dfs(v,deep+1);??
  • ????????}??
  • ????}??
  • }??
  • ??
  • void?lca(int?u,?int?v)??
  • {??
  • ????while(level[u]?>?level[v])??
  • ????{??
  • ????????if(bridge[u])??
  • ????????{??
  • ????????????result--;??
  • ????????????bridge[u]?=?0;??
  • ????????}??
  • ????????u?=?pre[u];??
  • ????}??
  • ????while(level[v]?>?level[u])??
  • ????{??
  • ????????if(bridge[v])??
  • ????????{??
  • ????????????result--;??
  • ????????????bridge[v]?=?0;??
  • ????????}??
  • ????????v?=?pre[v];??
  • ????}??
  • ????while(u?!=?v)??
  • ????{??
  • ????????if(bridge[u])??
  • ????????{??
  • ????????????bridge[u]?=?0;??
  • ????????????result--;??
  • ????????}??
  • ????????if(bridge[v])??
  • ????????{??
  • ????????????bridge[v]?=?0;??
  • ????????????result--;??
  • ????????}??
  • ????????u?=?pre[u];??
  • ????????v?=?pre[v];??
  • ????}??
  • }??
  • ??
  • int?main()??
  • {??
  • ????int?i,j;??
  • ????int?a,b;??
  • ????int?q;??
  • ????int?cases?=?1;??
  • ????while(true)??
  • ????{??
  • ????????scanf("%d?%d",&n,&m);??
  • ????????if(n?==?0?&&?m?==?0)??
  • ????????????break;??
  • ????????edgeNum?=?0;??
  • ????????edgeT?=?0;??
  • ????????result?=?0;??
  • ????????seq?=?0;??
  • ????????memset(index,-1,sizeof(index));??
  • ????????memset(index2,-1,sizeof(index2));??
  • ????????memset(dfn,-1,sizeof(dfn));??
  • ????????memset(vis,0,sizeof(vis));??
  • ????????memset(level,0,sizeof(level));??
  • ????????memset(bridge,0,sizeof(bridge));??
  • ????????makeSet();??
  • ????????for(i?=?0;?i?<?m;?i++)??
  • ????????{??
  • ????????????scanf("%d?%d",&a,&b);??
  • ????????????addEdge(a,b);??
  • ????????????addEdge(b,a);??
  • ????????}??
  • ????????scanf("%d",&q);??
  • ????????printf("Case?%d:\n",cases++);??
  • ????????bridge_dfs(1,-1);???????//找到邊的雙連通?縮點(diǎn)??
  • ????????int?x,y;??
  • ????????for(i?=?1;?i?<=?n;?i++)??//將縮點(diǎn)集合轉(zhuǎn)化為一顆樹??
  • ????????{??
  • ????????????for(j?=?index[i];?j?!=?-1;?j?=?e[j].next)??
  • ????????????{??
  • ????????????????x?=?findSet(i);??
  • ????????????????y?=?findSet(e[j].to);??
  • ????????????????if(x?!=?y)??
  • ????????????????????addTree(x,y);??
  • ????????????}??
  • ????????}??
  • ????????//??
  • ????????memset(vis,0,sizeof(vis));??
  • ????????vis[p[1]]?=?true;??
  • ????????level[p[1]]?=?1;??
  • ????????lca_dfs(p[1],1);??
  • ????????for(i?=?1;?i?<=?result;?i++)??
  • ????????????bridge[findSet(e[res[i]].to)]?=?1;??
  • ????????while(q--)??
  • ????????{??
  • ????????????scanf("%d?%d",&a,&b);??
  • ????????????a?=?findSet(a);??
  • ????????????b?=?findSet(b);??
  • ????????????if(a?!=?b)??
  • ????????????????lca(a,b);??
  • ????????????printf("%d\n",result);??
  • ????????}??
  • ????????printf("\n");??
  • ????}??
  • ????return?0;??
  • } ?
  • 總結(jié)

    以上是生活随笔為你收集整理的无向图——双连通分量的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 四季av中文字幕一区 | 亚洲图片中文字幕 | 国内精品久久久久久久久 | 奴性白洁会所调教 | 麻豆国产一区二区三区四区 | 91精品人妻一区二区三区蜜桃欧美 | 一区二区三区四区中文字幕 | 日韩中文字幕在线观看 | 欧美性xxxx图片 | 免费av手机在线观看 | 一区三区视频 | 成人国产精品入口免费视频 | 亚洲激情av| 日韩视频在线免费播放 | 亚洲欧美另类中文字幕 | 中文不卡av | 中文有码视频 | 中文字幕日韩一区二区三区 | 人妻少妇偷人精品久久久任期 | 欧美极品一区 | 一级黄色片免费播放 | 亚洲男人的天堂在线视频 | 成年人在线免费观看 | 日韩免费高清视频网站 | 日韩女优在线视频 | 国产黄色在线播放 | 婷婷射丁香| 欧美大浪妇猛交饥渴大叫 | 91插插插插 | 波多野结衣在线播放视频 | 欧美成人精品二区三区99精品 | 国产午夜视频在线 | 操欧美老逼 | 黄视频在线观看免费 | 9999在线视频| 成人在线视频免费观看 | 久久福利在线 | 成人夜夜 | 亚洲精品视频在线 | 99久久综合国产精品二区 | 欧美日韩一二三 | 天天操天天干天天干 | 亚洲一区在线视频观看 | 全黄性性激高免费视频 | 激情欧美一区二区三区 | 婷婷丁香一区二区三区 | 久久国产精品电影 | 日本r级电影在线观看 | 婷婷四房播播 | 校园伸入裙底揉捏1v1h | 浪荡奴双性跪着伺候 | 求毛片网站 | 日韩国产精品一区二区三区 | 草草影院av | 91精品国产闺蜜国产在线闺蜜 | 91传媒在线视频 | 免费三级在线 | 在线免费观看网站入口在哪 | 91视频在线免费看 | 久久资源av| 性饥渴的农村熟妇 | 日日夜夜天天干 | 91一区视频 | 日本一区二区三区在线观看 | 欧美日韩国产黄色 | 草草影院国产第一页 | 成人免费在线观看av | zzjizzji亚洲日本少妇 | 国产探花一区二区 | 人人爽久久涩噜噜噜网站 | av在线手机观看 | 国产免费叼嘿网站免费 | 蜜桃aaa | 99国产精品国产精品九九 | 韩国中文字幕hd久久精品 | 国产精品久久久久永久免费看 | 337p日本大胆噜噜噜噜 | 国产一区二区三区91 | 日日鲁鲁鲁夜夜爽爽狠狠视频97 | 天天射寡妇 | 成人手机在线观看 | 国产精品国产三级国产专区51区 | www精品一区二区三区 | 在线免费黄色网址 | 看黄免费网站 | 日朝毛片| 中国av免费看 | 久久精品黄色 | 精品人妻一区二区三区三区四区 | 国产欧美一区二区精品性色超碰 | 天堂网av在线播放 | 久久精品成人一区二区三区蜜臀 | 成人在线影片 | 欧美黑人精品 | 中文字幕亚洲一区二区三区五十路 | 精品美女 | 国产一级二级三级在线观看 | sese在线视频 | 蜜桃在线一区二区 |