日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【网络流】网络流小总结

發(fā)布時(shí)間:2024/6/21 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【网络流】网络流小总结 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、dinic最大流

我的模板。模板上已經(jīng)有了dfs上的優(yōu)化(比我以前的快多了。。)優(yōu)化啊優(yōu)化。

bool bfs(int st,int ed) {while(!q.empty()) q.pop();memset(d,-1,sizeof(d));q.push(st);d[st]=0;while(!q.empty()){int x=q.front();q.pop();for(int i=first[x];i!=-1;i=a[i].next){int y=a[i].y;if(d[y]==-1 && a[i].d>0){d[y]=d[x]+1;q.push(y);}} }return (d[ed]!=-1); }int dfs(int x,int flow,int ed) {int k,p,r=0;if(x==ed) return flow;for(int i=first[x];i!=-1;i=a[i].next){int y=a[i].y;if(d[y]==d[x]+1 && a[i].d>0){p=minn(a[i].d,flow-r);p=dfs(y,p,ed);r+=p; //優(yōu)化,把從這個(gè)點(diǎn)開始能流的全部流了a[i].d-=p;a[i^1].d+=p;}if(r==flow) break; // 優(yōu)化 }if(!r) d[x]=-1; //優(yōu)化return r; }int dinic(int st,int ed) {int ans=0;while(bfs(st,ed)){int k;while(k=dfs(st,INF,ed)) ans+=k;}return ans; } dinic

?

?

二、上下界網(wǎng)絡(luò)流

建立超級(jí)源點(diǎn)ss,超級(jí)匯點(diǎn)tt(上圖中的s改為ss,t改為tt)

對(duì)于每條x到y(tǒng),下界為k1,上界為k2的邊(x,y,k1,k2),拆成如圖這種形式:(x,y,k2-k1)(自由流),(ss,y,k1)(必須流入),(x,tt,k1)(必須流出)。

(1)沒有源點(diǎn)和匯點(diǎn):

可行流:跑一遍最大流,看是否滿流。滿流則有可行流。

最大流:每條邊加一個(gè)費(fèi)用f=1,然后跑最大費(fèi)用循環(huán)流(詳見下面)。

最小流:每條邊加一個(gè)費(fèi)用f=1,然后跑最小費(fèi)用循環(huán)流。

(2)有源點(diǎn)和匯點(diǎn):

原來的源點(diǎn)s,原來的匯點(diǎn)t。在s和t之間建邊(t,s,INF),使原圖變?yōu)闊o源匯的循環(huán)流。

可行流:拆邊后跑一遍最大流,滿流則有可行流。

最大流:去掉ss、tt(去掉后無論怎么跑都是已經(jīng)滿足了下界的可行流),然后從原來的源匯點(diǎn)s到t跑一遍最大流,讓殘余網(wǎng)絡(luò)的增廣路全部加上去。此時(shí)(s,t,INF)的那條邊的反向邊(t,s)的流量就是答案。

最小路:去掉ss、tt后,從原來的源匯點(diǎn)t到s跑一遍最大流(逆向求解,讓最多的流量還回去)。

上下界網(wǎng)絡(luò)路講解:http://www.cnblogs.com/kane0526/archive/2013/04/05/3001108.html

模板(poj2396)

1 #include<cstdio> 2 #include<cstdlib> 3 #include<cstring> 4 #include<iostream> 5 #include<queue> 6 #include<vector> 7 using namespace std; 8 9 const int N=500,M=500,INF=(int)1e9; 10 const int S=N+M+4; 11 int n,m,s,t,ss,tt,len,sum,bk; 12 int d[N+M+4],p[N][M],first[N+M+4],map[2][N][M]; 13 struct node{int x,y,d,next;}a[N*M*2]; 14 queue<int> q; 15 16 int minn(int x,int y){return x<y ? x:y;} 17 int maxx(int x,int y){return x>y ? x:y;} 18 19 void ins(int x,int y,int d) 20 { 21 a[++len].x=x;a[len].y=y;a[len].d=d; 22 a[len].next=first[x];first[x]=len; 23 if(x==ss) sum+=d; 24 swap(x,y); 25 a[++len].x=x;a[len].y=y;a[len].d=0; 26 a[len].next=first[x];first[x]=len; 27 } 28 29 void make_edge(int x,int y) 30 { 31 if(map[0][x][y]>map[1][x][y]) bk=0; 32 if(map[0][x][y]==0) ins(x,y,map[1][x][y]); 33 else 34 { 35 ins(ss,y,map[0][x][y]); 36 ins(x,tt,map[0][x][y]); 37 ins(x,y,map[1][x][y]-map[0][x][y]); 38 } 39 } 40 41 void build(char c,int x,int y,int z) 42 { 43 int t1=0,t2=INF; 44 if(c=='=') t1=t2=z; 45 if(c=='>') t1=z+1; 46 if(c=='<') t2=z-1; 47 map[0][x][y]=maxx(map[0][x][y],t1); 48 map[1][x][y]=minn(map[1][x][y],t2); 49 50 } 51 52 bool bfs(int st,int ed) 53 { 54 while(!q.empty()) q.pop(); 55 memset(d,-1,sizeof(d)); 56 q.push(st); 57 d[st]=0; 58 while(!q.empty()) 59 { 60 int x=q.front();q.pop(); 61 for(int i=first[x];i!=-1;i=a[i].next) 62 { 63 int y=a[i].y; 64 if(d[y]==-1 && a[i].d>0) 65 { 66 d[y]=d[x]+1; 67 q.push(y); 68 } 69 } 70 } 71 return (d[ed]!=-1); 72 } 73 74 int dfs(int x,int flow,int ed) 75 { 76 int k,p,r=0; 77 if(x==ed) return flow; 78 for(int i=first[x];i!=-1;i=a[i].next) 79 { 80 int y=a[i].y; 81 if(d[y]==d[x]+1 && a[i].d>0) 82 { 83 p=minn(a[i].d,flow-r); 84 p=dfs(y,p,ed); 85 r+=p; 86 a[i].d-=p; 87 a[i^1].d+=p; 88 } 89 } 90 if(!r) d[x]=-1; 91 return r; 92 } 93 94 int dinic(int st,int ed) 95 { 96 int ans=0; 97 while(bfs(st,ed)) 98 { 99 int k; 100 while(k=dfs(st,INF,ed)) ans+=k; 101 } 102 return ans; 103 } 104 105 int main() 106 { 107 freopen("a.in","r",stdin); 108 freopen("a.out","w",stdout); 109 int T; 110 scanf("%d",&T); 111 while(T--) 112 { 113 scanf("%d%d",&n,&m); 114 int x,y,z,k; 115 char c; 116 s=n+m+1;t=s+1;ss=t+1;tt=ss+1; 117 len=-1;sum=0;bk=1; 118 memset(first,-1,sizeof(first)); 119 memset(map[0],0,sizeof(map[0])); 120 memset(map[1],63,sizeof(map[1])); 121 memset(p,0,sizeof(p)); 122 int sum1=0,sum2=0; 123 for(int i=1;i<=n;i++) 124 { 125 scanf("%d",&x); 126 map[0][s][i]=map[1][s][i]=x; 127 make_edge(s,i); 128 sum1+=x; 129 } 130 for(int i=n+1;i<=n+m;i++) 131 { 132 scanf("%d",&x); 133 map[0][i][t]=map[1][i][t]=x; 134 make_edge(i,t); 135 sum2+=x; 136 } 137 if(sum1!=sum2) bk=0; 138 scanf("%d",&k); 139 for(int i=1;i<=k;i++) 140 { 141 scanf("%d%d",&x,&y);getchar(); 142 scanf("%c%d",&c,&z); 143 if(x && y) build(c,x,y+n,z); 144 if(!x && y) 145 for(int j=1;j<=n;j++) 146 build(c,j,y+n,z); 147 if(x && !y) 148 for(int j=1;j<=m;j++) 149 build(c,x,j+n,z); 150 if(!x && !y) 151 for(int j=1;j<=n;j++) 152 for(int l=1;l<=m;l++) 153 build(c,j,l+n,z); 154 } 155 for(int i=1;i<=n;i++) 156 for(int j=n+1;j<=n+m;j++) 157 make_edge(i,j); 158 ins(t,s,INF); 159 if(!bk || dinic(ss,tt)!=sum) printf("IMPOSSIBLE\n"); 160 else 161 { 162 for(int i=0;i<len;i++) 163 { 164 x=a[i].x;y=a[i].y; 165 if(x<=n+m && y<=n+m) 166 { 167 if(!p[x][y-n]) p[x][y-n]=map[0][x][y]+a[i^1].d; 168 } 169 } 170 for(int i=1;i<=n;i++) 171 { 172 for(int j=1;j<=m;j++) 173 printf("%d ",p[i][j]); 174 printf("\n"); 175 } 176 } 177 printf("\n"); 178 } 179 return 0; 180 } poj2396

?

三、最小費(fèi)用最大流

在滿足最大流的前提下求最小費(fèi)用,就是在bfs的時(shí)候找一條費(fèi)用最小的增廣路。

1 void ins(int x,int y,int d,int f) 2 { 3 a[++len].x=x;a[len].y=y;a[len].d=d;a[len].f=f; 4 a[len].next=first[x];first[x]=len; 5 a[++len].x=y;a[len].y=x;a[len].d=0;a[len].f=-f; 6 a[len].next=first[y];first[y]=len; 7 } 8 9 int bfs(int st,int ed) 10 { 11 while(!q.empty()) q.pop(); 12 memset(pre,-1,sizeof(pre)); 13 memset(dis,63,sizeof(dis)); 14 memset(in,0,sizeof(in)); 15 memset(flow,0,sizeof(flow)); 16 pre[st]=0;dis[st]=0;in[st]=1;flow[st]=INF;q.push(st); 17 while(!q.empty()) 18 { 19 int x=q.front();in[x]=0;q.pop(); 20 for(int i=first[x];i!=-1;i=a[i].next) 21 { 22 int y=a[i].y; 23 if(a[i].d && dis[y]>dis[x]+a[i].f) 24 { 25 dis[y]=dis[x]+a[i].f; 26 pre[y]=i; 27 flow[y]=minn(a[i].d,flow[x]); 28 if(!in[y]) {in[y]=1;q.push(y);} 29 } 30 } 31 } 32 if(pre[ed]==-1) return -1; 33 return flow[ed]; 34 } 35 36 void MFMC(int st,int ed)//max flow min cost 37 { 38 int k,p; 39 fl=0,cl=0; 40 while((k=bfs(st,ed))!=-1) 41 { 42 fl+=k; 43 cl+=dis[ed]*k; 44 p=ed; 45 while(p!=st) 46 { 47 a[pre[p]].d-=k; 48 a[pre[p]^1].d+=k; 49 p=a[pre[p]].x; 50 } 51 } 52 } 費(fèi)用流

?

四、最小割

根據(jù)最大流最小割原理,最大流就是最小割。主要是建圖模型。

經(jīng)典例題:一些資源,要不給A,要不給B,有相應(yīng)的收益,問最大收益。寫在我的題表里了。

我寫了題解:http://www.cnblogs.com/KonjakJuruo/p/5516479.html

?

五、最大費(fèi)用循環(huán)流

每條邊有上下界k1、k2,費(fèi)用f。問最大費(fèi)用循環(huán)流。

對(duì)于每條邊(x,y,k1,k2,f),拆成:

1.(x,y,k1,k1,f) ?(再按上下界拆邊,即(s,y,k1,f) (x,t,k1,f)), (x到y(tǒng)之間一定要流k1的流量)

2.(y,x,k2-k1,-f) ?, ??(s,y,k2-k1,0) ? , ? (x,t,k2-f1,f); ?(x到y(tǒng)之間有k2-k1的自由流,先假設(shè)全部都可以得到,然后建(y,x,k2-k1,-f)就是給它反悔的機(jī)會(huì),如果必須反悔就減回f*流量)

跑最大流,用k2的和判滿流,滿流則有解。

?

重點(diǎn)來了,題表及代碼:

1 #include<cstdio> 2 #include<cstdlib> 3 #include<cstring> 4 #include<iostream> 5 #include<queue> 6 #include<vector> 7 using namespace std; 8 9 const int N=500,M=500,INF=(int)1e9; 10 const int S=N+M+4; 11 int n,m,s,t,ss,tt,len,sum,bk; 12 int d[N+M+4],p[N][M],first[N+M+4],map[2][N][M]; 13 struct node{int x,y,d,next;}a[N*M*2]; 14 queue<int> q; 15 16 int minn(int x,int y){return x<y ? x:y;} 17 int maxx(int x,int y){return x>y ? x:y;} 18 19 void ins(int x,int y,int d) 20 { 21 a[++len].x=x;a[len].y=y;a[len].d=d; 22 a[len].next=first[x];first[x]=len; 23 if(x==ss) sum+=d; 24 swap(x,y); 25 a[++len].x=x;a[len].y=y;a[len].d=0; 26 a[len].next=first[x];first[x]=len; 27 } 28 29 void make_edge(int x,int y) 30 { 31 if(map[0][x][y]>map[1][x][y]) bk=0; 32 if(map[0][x][y]==0) ins(x,y,map[1][x][y]); 33 else 34 { 35 ins(ss,y,map[0][x][y]); 36 ins(x,tt,map[0][x][y]); 37 ins(x,y,map[1][x][y]-map[0][x][y]); 38 } 39 } 40 41 void build(char c,int x,int y,int z) 42 { 43 int t1=0,t2=INF; 44 if(c=='=') t1=t2=z; 45 if(c=='>') t1=z+1; 46 if(c=='<') t2=z-1; 47 map[0][x][y]=maxx(map[0][x][y],t1); 48 map[1][x][y]=minn(map[1][x][y],t2); 49 50 } 51 52 bool bfs(int st,int ed) 53 { 54 while(!q.empty()) q.pop(); 55 memset(d,-1,sizeof(d)); 56 q.push(st); 57 d[st]=0; 58 while(!q.empty()) 59 { 60 int x=q.front();q.pop(); 61 for(int i=first[x];i!=-1;i=a[i].next) 62 { 63 int y=a[i].y; 64 if(d[y]==-1 && a[i].d>0) 65 { 66 d[y]=d[x]+1; 67 q.push(y); 68 } 69 } 70 } 71 return (d[ed]!=-1); 72 } 73 74 int dfs(int x,int flow,int ed) 75 { 76 int k,p,r=0; 77 if(x==ed) return flow; 78 for(int i=first[x];i!=-1;i=a[i].next) 79 { 80 int y=a[i].y; 81 if(d[y]==d[x]+1 && a[i].d>0) 82 { 83 p=minn(a[i].d,flow-r); 84 p=dfs(y,p,ed); 85 r+=p; 86 a[i].d-=p; 87 a[i^1].d+=p; 88 } 89 } 90 if(!r) d[x]=-1; 91 return r; 92 } 93 94 int dinic(int st,int ed) 95 { 96 int ans=0; 97 while(bfs(st,ed)) 98 { 99 int k; 100 while(k=dfs(st,INF,ed)) ans+=k; 101 } 102 return ans; 103 } 104 105 int main() 106 { 107 int T; 108 scanf("%d",&T); 109 while(T--) 110 { 111 scanf("%d%d",&n,&m); 112 int x,y,z,k; 113 char c; 114 s=n+m+1;t=s+1;ss=t+1;tt=ss+1; 115 len=-1;sum=0;bk=1; 116 memset(first,-1,sizeof(first)); 117 memset(map[0],0,sizeof(map[0])); 118 memset(map[1],63,sizeof(map[1])); 119 memset(p,0,sizeof(p)); 120 int sum1=0,sum2=0; 121 for(int i=1;i<=n;i++) 122 { 123 scanf("%d",&x); 124 map[0][s][i]=map[1][s][i]=x; 125 make_edge(s,i); 126 sum1+=x; 127 } 128 for(int i=n+1;i<=n+m;i++) 129 { 130 scanf("%d",&x); 131 map[0][i][t]=map[1][i][t]=x; 132 make_edge(i,t); 133 sum2+=x; 134 } 135 if(sum1!=sum2) bk=0; 136 scanf("%d",&k); 137 for(int i=1;i<=k;i++) 138 { 139 scanf("%d%d",&x,&y);getchar(); 140 scanf("%c%d",&c,&z); 141 if(x && y) build(c,x,y+n,z); 142 if(!x && y) 143 for(int j=1;j<=n;j++) 144 build(c,j,y+n,z); 145 if(x && !y) 146 for(int j=1;j<=m;j++) 147 build(c,x,j+n,z); 148 if(!x && !y) 149 for(int j=1;j<=n;j++) 150 for(int l=1;l<=m;l++) 151 build(c,j,l+n,z); 152 } 153 for(int i=1;i<=n;i++) 154 for(int j=n+1;j<=n+m;j++) 155 make_edge(i,j); 156 ins(t,s,INF); 157 if(!bk || dinic(ss,tt)!=sum) printf("IMPOSSIBLE\n"); 158 else 159 { 160 for(int i=0;i<len;i++) 161 { 162 x=a[i].x;y=a[i].y; 163 if(x<=n+m && y<=n+m) 164 { 165 if(!p[x][y-n]) p[x][y-n]=map[0][x][y]+a[i^1].d; 166 } 167 } 168 for(int i=1;i<=n;i++) 169 { 170 for(int j=1;j<=m;j++) 171 printf("%d ",p[i][j]); 172 printf("\n"); 173 } 174 } 175 printf("\n"); 176 } 177 return 0; 178 } poj2396 #include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> #include<queue> #include<vector> using namespace std;const int N=1100,M=5100,K=110,INF=(int)1e9; int s,t,len,fl,cl,pre[N],dis[N],flow[N],first[N]; bool in[N]; struct node{int x,y,d,f,next; }a[51000]; queue<int> q;int minn(int x,int y){return x<y ? x:y;}void ins(int x,int y,int d,int f) {a[++len].x=x;a[len].y=y;a[len].d=d;a[len].f=f;a[len].next=first[x];first[x]=len;a[++len].x=y;a[len].y=x;a[len].d=0;a[len].f=-f;a[len].next=first[y];first[y]=len; }int bfs(int st,int ed) {while(!q.empty()) q.pop();memset(pre,-1,sizeof(pre));memset(dis,63,sizeof(dis));memset(in,0,sizeof(in));memset(flow,0,sizeof(flow));pre[st]=0;dis[st]=0;in[st]=1;flow[st]=INF;q.push(st);while(!q.empty()){int x=q.front();in[x]=0;q.pop();for(int i=first[x];i!=-1;i=a[i].next){int y=a[i].y;if(a[i].d && dis[y]>dis[x]+a[i].f){dis[y]=dis[x]+a[i].f;pre[y]=i;flow[y]=minn(a[i].d,flow[x]);if(!in[y]) {in[y]=1;q.push(y);}}}}if(pre[ed]==-1) return -1;return flow[ed]; }void MFMC(int st,int ed)//max flow min cost {int k,p;fl=0,cl=0;while((k=bfs(st,ed))!=-1){fl+=k;cl+=dis[ed]*k;p=ed;while(p!=st){a[pre[p]].d-=k;a[pre[p]^1].d+=k;p=a[pre[p]].x;}} }int main() {int n,m,kk;while(scanf("%d%d%d",&n,&m,&kk)!=EOF){int x,y,d,f;len=-1;memset(first,-1,sizeof(first));for(int i=1;i<=m;i++){scanf("%d%d%d%d",&x,&y,&f,&d);for(int j=1;j<=d;j++)ins(x,y,1,f*(2*j-1));}s=n+1,t=n;ins(s,1,kk,0);MFMC(s,t);// printf("fl = %d cl = %d\n",fl,cl);if(fl==kk) printf("%d\n",cl);else printf("-1\n");}return 0; } LA5095 1 // 方法一 把每個(gè)詢問看成一個(gè)點(diǎn),然后A的詢問連源點(diǎn),B的詢問連匯點(diǎn),如果AB間的某個(gè) 2 // 詢問有矛盾就在它們中間連一條無限大的邊,ans=sum-最小割。 3 4 #include<cstdio> 5 #include<cstdlib> 6 #include<cstring> 7 #include<iostream> 8 #include<queue> 9 #include<vector> 10 using namespace std; 11 12 const int N=300100,INF=(int)1e9; 13 int s,t,len,num; 14 int first[2*N],dis[2*N]; 15 int A[N],B[N],p1[N],p2[N]; 16 // bool vis[2*N]; 17 bool vis[3100][3100]; 18 struct node{ 19 int x,y,d,next; 20 }a[6*N]; 21 queue<int> q; 22 23 int minn(int x,int y){return x<y ? x:y;} 24 int maxx(int x,int y){return x>y ? x:y;} 25 26 void ins(int x,int y,int d) 27 { 28 a[++len].x=x;a[len].y=y;a[len].d=d; 29 a[len].next=first[x];first[x]=len; 30 a[++len].x=y;a[len].y=x;a[len].d=0; 31 a[len].next=first[y];first[y]=len; 32 } 33 34 bool bfs(int st,int ed) 35 { 36 while(!q.empty()) q.pop(); 37 memset(dis,-1,sizeof(dis)); 38 dis[st]=0; 39 q.push(st); 40 while(!q.empty()) 41 { 42 int x=q.front();q.pop(); 43 for(int i=first[x];i!=-1;i=a[i].next) 44 { 45 int y=a[i].y; 46 if(dis[y]==-1 && a[i].d>0) 47 { 48 dis[y]=dis[x]+1; 49 q.push(y); 50 } 51 } 52 } 53 return (dis[ed]!=-1); 54 } 55 56 int dfs(int x,int ed,int flow) 57 { 58 int r=0,p; 59 if(x==ed) return flow; 60 for(int i=first[x];i!=-1;i=a[i].next) 61 { 62 int y=a[i].y; 63 if(dis[y]==dis[x]+1 && a[i].d>0) 64 { 65 p=minn(a[i].d,flow-r); 66 p=dfs(y,ed,p); 67 r+=p; 68 a[i].d-=p; 69 a[i^1].d+=p; 70 } 71 } 72 if(!r) dis[x]=-1; 73 return r; 74 } 75 76 int dinic(int st,int ed) 77 { 78 int ans=0; 79 while(bfs(st,ed)) 80 { 81 int p; 82 while(p=dfs(st,ed,INF)) ans+=p; 83 } 84 return ans; 85 } 86 87 int main() 88 { 89 int T,cas=0; 90 scanf("%d",&T); 91 while(T--) 92 { 93 len=-1; 94 memset(first,-1,sizeof(first)); 95 memset(A,0,sizeof(A)); 96 memset(B,0,sizeof(B)); 97 memset(vis,0,sizeof(vis)); 98 int n,m,sum=0,mx=0,num=300001; 99 scanf("%d",&n); 100 for(int i=1;i<=n;i++) 101 { 102 scanf("%d",&p1[i]); 103 sum+=p1[i]; 104 int x;num++; 105 while(1) 106 { 107 char c; 108 scanf("%d%c",&x,&c); 109 A[x]=i; 110 mx=maxx(mx,x); 111 if(c=='\n') break; 112 } 113 } 114 scanf("%d",&m); 115 s=0,t=n+m+1; 116 for(int i=1;i<=m;i++) 117 { 118 scanf("%d",&p2[i]); 119 sum+=p2[i];num++; 120 int x; 121 while(1) 122 { 123 char c; 124 scanf("%d%c",&x,&c); 125 B[x]=i; 126 mx=maxx(mx,x); 127 if(c=='\n') break; 128 } 129 } 130 for(int i=1;i<=n;i++) ins(s,i,p1[i]); 131 for(int i=1;i<=m;i++) ins(i+n,t,p2[i]); 132 for(int i=1;i<=mx;i++) 133 { 134 if(!A[i]||!B[i]||vis[A[i]][B[i]]) continue; 135 vis[A[i]][B[i]]=true; 136 ins(A[i],B[i]+n,INF); 137 } 138 printf("Case %d:\n",++cas); 139 printf("%d\n",sum-dinic(s,t)); 140 if(T) printf("\n"); 141 } 142 return 0; 143 } LA3487-方法一 1 #include<cstdio> 2 #include<cstdlib> 3 #include<cstring> 4 #include<iostream> 5 #include<queue> 6 #include<vector> 7 using namespace std; 8 9 const int N=300100,INF=(int)1e9; 10 int s,t,len,num; 11 int first[2*N],dis[2*N]; 12 int A[N],B[N]; 13 bool vis[3100][3100]; 14 struct node{ 15 int x,y,d,next; 16 }a[6*N]; 17 queue<int> q; 18 19 int minn(int x,int y){return x<y ? x:y;} 20 int maxx(int x,int y){return x>y ? x:y;} 21 22 void ins(int x,int y,int d) 23 { 24 a[++len].x=x;a[len].y=y;a[len].d=d; 25 a[len].next=first[x];first[x]=len; 26 a[++len].x=y;a[len].y=x;a[len].d=0; 27 a[len].next=first[y];first[y]=len; 28 } 29 30 bool bfs(int st,int ed) 31 { 32 while(!q.empty()) q.pop(); 33 memset(dis,-1,sizeof(dis)); 34 dis[st]=0; 35 q.push(st); 36 while(!q.empty()) 37 { 38 int x=q.front();q.pop(); 39 for(int i=first[x];i!=-1;i=a[i].next) 40 { 41 int y=a[i].y; 42 if(dis[y]==-1 && a[i].d>0) 43 { 44 dis[y]=dis[x]+1; 45 q.push(y); 46 } 47 } 48 } 49 return (dis[ed]!=-1); 50 } 51 52 int dfs(int x,int ed,int flow) 53 { 54 int r=0,p; 55 if(x==ed) return flow; 56 for(int i=first[x];i!=-1;i=a[i].next) 57 { 58 int y=a[i].y; 59 if(dis[y]==dis[x]+1 && a[i].d>0) 60 { 61 p=minn(a[i].d,flow-r); 62 p=dfs(y,ed,p); 63 r+=p; 64 a[i].d-=p; 65 a[i^1].d+=p; 66 } 67 } 68 if(!r) dis[x]=-1; 69 return r; 70 } 71 72 int dinic(int st,int ed) 73 { 74 int ans=0; 75 while(bfs(st,ed)) 76 { 77 int p; 78 while(p=dfs(st,ed,INF)) ans+=p; 79 } 80 return ans; 81 } 82 83 int main() 84 { 85 int T,cas=0; 86 scanf("%d",&T); 87 while(T--) 88 { 89 len=-1; 90 memset(first,-1,sizeof(first)); 91 memset(A,0,sizeof(A)); 92 memset(B,0,sizeof(B)); 93 memset(vis,0,sizeof(vis)); 94 int n,m,p,sum=0,mx=0,num=300001; 95 scanf("%d",&n); 96 for(int i=1;i<=n;i++) 97 { 98 scanf("%d",&p); 99 sum+=p; 100 int x;num++; 101 ins(0,num,p); 102 while(1) 103 { 104 char c; 105 scanf("%d%c",&x,&c); 106 ins(num,x+1,INF); 107 if(c=='\n') break; 108 } 109 } 110 scanf("%d",&m); 111 s=0,t=1; 112 for(int i=1;i<=m;i++) 113 { 114 scanf("%d",&p); 115 sum+=p;num++; 116 ins(num,t,p); 117 int x; 118 while(1) 119 { 120 char c; 121 scanf("%d%c",&x,&c); 122 ins(x+1,num,INF); 123 if(c=='\n') break; 124 } 125 } 126 // for(int i=1;i<=n;i++) ins(s,i,p1[i]); 127 // for(int i=1;i<=m;i++) ins(i+n,t,p2[i]); 128 for(int i=1;i<=mx;i++) 129 { 130 if(!A[i]||!B[i]||vis[A[i]][B[i]]) continue; 131 vis[A[i]][B[i]]=true; 132 ins(A[i],B[i]+n,INF); 133 } 134 printf("Case %d:\n",++cas); 135 printf("%d\n",sum-dinic(s,t)); 136 if(T) printf("\n"); 137 } 138 return 0; 139 } LA3487-方法二 #include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> #include<queue> using namespace std;const int N=50*2,INF=(int)1e9; char ss[N][N]; int s,t,n,A,B,fl,cl,len,must_have,first[N],flow[N],dis[N],pre[N],s1[N],s2[N]; bool in[N]; struct node{int x,y,d,f,next; }a[2*N*N]; queue<int> q; int minn(int x,int y){return x<y ? x:y;} int maxx(int x,int y){return x>y ? x:y;}void ins(int x,int y,int d,int f) {a[++len].x=x;a[len].y=y;a[len].d=d;a[len].f=f;a[len].next=first[x];first[x]=len;a[++len].x=y;a[len].y=x;a[len].d=0;a[len].f=-f;a[len].next=first[y];first[y]=len; }int bfs(int st,int ed) {while(!q.empty()) q.pop();memset(dis,63,sizeof(dis));memset(flow,0,sizeof(flow));memset(in,0,sizeof(in));memset(pre,-1,sizeof(pre));q.push(st);in[st]=1;dis[st]=0;flow[st]=INF;pre[st]=0;while(!q.empty()){int x=q.front();in[x]=0;q.pop();for(int i=first[x];i!=-1;i=a[i].next){int y=a[i].y;if(a[i].d>0 && dis[y]>dis[x]+a[i].f){dis[y]=dis[x]+a[i].f;pre[y]=i;flow[y]=minn(flow[x],a[i].d);if(!in[y]) in[y]=1,q.push(y);}}}if(pre[ed]==-1) return 0;return flow[ed]; }void dinic(int st,int ed) {int k;fl=0,cl=0;while(k=bfs(st,ed)){fl+=k;cl+=dis[ed]*k;int p=ed;while(p!=st){a[pre[p]].d-=k;a[pre[p]^1].d+=k;p=a[pre[p]].x;}} }bool check()//如果答案是0 {int mx=0;memset(s1,0,sizeof(s1));memset(s2,0,sizeof(s2));for(int i=1;i<=n;i++)for(int j=0;j<n;j++)if(ss[i][j]=='C') must_have++,s1[i]++,s2[j+1]++,mx=maxx(mx,maxx(s1[i],s2[j+1])); for(int i=1;i<=n;i++) if(s1[i]!=s2[i]) return 0;if(must_have*A<mx*B) return 0; return 1; }int main() {int T=0;while(1){scanf("%d%d%d",&n,&A,&B);if(!n && !A && !B) return 0;s=0,t=2*n+1;must_have=0;for(int i=1;i<=n;i++)scanf("%s",ss[i]);int mx,sum,bk=0;int ans=-1;if(check()) bk=1,ans=must_have;for(int k=n;k>=1;k--){mx=0,sum=0;len=-1;memset(first,-1,sizeof(first));for(int i=1;i<=n;i++){for(int j=0;j<n;j++){int x=i,y=j+1+n;if(ss[i][j]=='.') ins(x,y,1,0); if(ss[i][j]=='C'){sum++;ins(s,y,1,0);ins(x,t,1,0); }}}for(int i=1;i<=n;i++){int x=i+n,y=i;ins(y,x,k,1);sum+=k;mx+=k;ins(s,y,k,0),ins(x,t,k,0);}dinic(s,t);mx-=cl;if(sum>fl) continue;if(mx && mx*A<k*B) continue;bk=1;ans=maxx(ans,mx);}printf("Case %d: ",++T);if(!bk) printf("impossible\n");else printf("%d\n",ans-must_have);}return 0; } LA5131 1 #include<cstdio> 2 #include<cstdlib> 3 #include<cstring> 4 #include<iostream> 5 #include<queue> 6 using namespace std; 7 8 const int N=400,INF=(int)1e9; 9 int s,t,n,len,fl,cl,first[N],dis[N],pre[N],flow[N]; 10 bool in[N]; 11 struct node{ 12 int x,y,d,f,next; 13 }a[N*N]; 14 queue<int> q; 15 16 int minn(int x,int y){return x<y ? x:y;} 17 18 void ins(int x,int y,int d,int f) 19 { 20 a[++len].x=x;a[len].y=y;a[len].d=d;a[len].f=f; 21 a[len].next=first[x];first[x]=len; 22 a[++len].y=x;a[len].x=y;a[len].d=0;a[len].f=-f; 23 a[len].next=first[y];first[y]=len; 24 } 25 26 bool bfs(int st,int ed) 27 { 28 while(!q.empty()) q.pop(); 29 memset(dis,-1,sizeof(dis)); 30 memset(flow,0,sizeof(flow)); 31 memset(pre,-1,sizeof(pre)); 32 memset(in,0,sizeof(in)); 33 q.push(st); 34 in[st]=1,dis[st]=0,flow[st]=INF; 35 while(!q.empty()) 36 { 37 int x=q.front();in[x]=0;q.pop(); 38 for(int i=first[x];i!=-1;i=a[i].next) 39 { 40 int y=a[i].y; 41 if(a[i].d && dis[y]<dis[x]+a[i].f) 42 { 43 dis[y]=dis[x]+a[i].f; 44 flow[y]=minn(a[i].d,flow[x]); 45 pre[y]=i; 46 if(!in[y]) in[y]=1,q.push(y); 47 } 48 } 49 } 50 return flow[ed]; 51 } 52 53 void MCML(int st,int ed) 54 { 55 int k; 56 fl=0;cl=0; 57 while(k=bfs(st,ed)) 58 { 59 cl+=dis[ed]*k; 60 fl+=k; 61 int p=ed; 62 while(p!=st) 63 { 64 a[pre[p]].d-=k; 65 a[pre[p]^1].d+=k; 66 p=a[pre[p]].x; 67 } 68 } 69 } 70 71 int main() 72 { 73 while(1) 74 { 75 scanf("%d",&n); 76 if(!n) return 0; 77 len=-1; 78 memset(first,-1,sizeof(first)); 79 s=0,t=366; 80 for(int i=1;i<365;i++) ins(i,i+1,2,0); 81 ins(s,1,2,0);ins(365,t,2,0); 82 for(int i=1;i<=n;i++) 83 { 84 int x,y,d; 85 scanf("%d%d%d",&x,&y,&d); 86 if(x>y) swap(x,y); 87 ins(x,y+1,1,d); 88 } 89 MCML(s,t); 90 printf("%d\n",cl); 91 } 92 return 0; 93 } LA2796 1 #include<cstdio> 2 #include<cstdlib> 3 #include<cstring> 4 #include<iostream> 5 #include<queue> 6 using namespace std; 7 8 const int N=3000,INF=(int)1e9; 9 char ss[N]; 10 int n,m,s,t,len,ct,dis[N],first[N]; 11 bool in[N]; 12 struct node{ 13 int x,y,d,next; 14 }a[100100]; 15 queue<int> q; 16 17 int idx(int x,int y){return (x-1)*m+y;} 18 int minn(int x,int y){return x<y ? x:y;} 19 20 void ins(int x,int y,int d) 21 { 22 a[++len].x=x;a[len].y=y;a[len].d=d; 23 a[len].next=first[x];first[x]=len; 24 a[++len].y=x;a[len].x=y;a[len].d=0; 25 a[len].next=first[y];first[y]=len; 26 } 27 28 bool bfs(int st,int ed) 29 { 30 while(!q.empty()) q.pop(); 31 memset(dis,-1,sizeof(dis)); 32 memset(in,0,sizeof(in)); 33 q.push(st);dis[st]=0;in[st]=1; 34 while(!q.empty()) 35 { 36 int x=q.front();in[x]=0;q.pop(); 37 for(int i=first[x];i!=-1;i=a[i].next) 38 { 39 int y=a[i].y; 40 if(a[i].d && dis[y]==-1) 41 { 42 dis[y]=dis[x]+1; 43 if(!in[y]) in[y]=1,q.push(y); 44 } 45 } 46 } 47 return (dis[ed]!=-1); 48 } 49 50 int dfs(int x,int ed,int flow) 51 { 52 int r=0; 53 if(x==ed) return flow; 54 for(int i=first[x];i!=-1;i=a[i].next) 55 { 56 int y=a[i].y; 57 if(a[i].d && dis[y]==dis[x]+1) 58 { 59 int p=minn(a[i].d,flow-r); 60 p=dfs(y,ed,p); 61 r+=p; 62 a[i].d-=p; 63 a[i^1].d+=p; 64 } 65 if(r==flow) break; 66 } 67 if(!r) dis[x]=-1; 68 return r; 69 } 70 71 int dinic(int st,int ed) 72 { 73 int k,ans=0; 74 while(bfs(st,ed)) 75 ans+=dfs(st,ed,INF); 76 return ans; 77 } 78 79 int main() 80 { 81 int T; 82 scanf("%d",&T); 83 while(T--) 84 { 85 int d,f,b; 86 scanf("%d%d",&m,&n); 87 s=0,t=n*m+1;ct=0; 88 scanf("%d%d%d",&d,&f,&b); 89 len=-1; 90 memset(first,-1,sizeof(first)); 91 for(int i=1;i<=n;i++) 92 { 93 scanf("%s",ss+1); 94 for(int j=1;j<=m;j++) 95 { 96 int x=idx(i,j),y1=idx(i-1,j),y2=idx(i,j-1); 97 if(ss[j]=='.' && (i==1 || i==n || j==1 || j==m)) 98 ct+=f,ss[j]='#'; 99 if(ss[j]=='.') 100 { 101 ins(s,x,f);ins(x,t,0); 102 if(i-1>=1) ins(x,y1,b),ins(y1,x,b); 103 if(j-1>=1) ins(x,y2,b),ins(y2,x,b); 104 } 105 if(ss[j]=='#') 106 { 107 ins(s,x,0); 108 if(i==1 || i==n || j==1 || j==m) ins(x,t,INF); 109 else ins(x,t,d); 110 if(i-1>=1) ins(x,y1,b),ins(y1,x,b); 111 if(j-1>=1) ins(x,y2,b),ins(y2,x,b); 112 } 113 } 114 } 115 printf("%d\n",ct+dinic(s,t)); 116 } 117 return 0; 118 } uva1515 #include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> #include<queue> using namespace std;const int N=110,INF=(int)1e9; int s,t,sum,fl,cl,len,first[N],pre[N],flow[N],dis[N]; bool bk,in[N]; struct node {int x,y,d,f,next; }a[100010]; queue<int> q;int minn(int x,int y){return x<y ? x:y;} int A(int x){return x*2-1;} int B(int x){return x*2;}void ins(int x,int y,int d,int f) {a[++len].x=x;a[len].y=y;a[len].d=d;a[len].f=f;a[len].next=first[x];first[x]=len;a[++len].y=x;a[len].x=y;a[len].d=0;a[len].f=-f;a[len].next=first[y];first[y]=len; }void addedge(int x,int y,int k1,int k2,int f) {sum+=k2;//(x,y,k1,k1,f);if(k1){ins(s,y,k1,f);ins(x,t,k1,f); }//(x,y,0,k2-k1,f);if(k2!=k1){ins(s,y,k2-k1,0);ins(y,x,k2-k1,-f);ins(x,t,k2-k1,f); } }int bfs(int st,int ed) {while(!q.empty()) q.pop();memset(in,0,sizeof(in));memset(dis,63,sizeof(dis));memset(flow,0,sizeof(flow));memset(pre,-1,sizeof(pre));q.push(st);dis[st]=0;flow[st]=INF;in[st]=1;while(!q.empty()){int x=q.front();in[x]=0;q.pop();for(int i=first[x];i!=-1;i=a[i].next){int y=a[i].y;if(a[i].d && dis[y]>dis[x]+a[i].f){dis[y]=dis[x]+a[i].f;flow[y]=minn(flow[x],a[i].d);pre[y]=i;if(!in[y]) in[y]=1,q.push(y);}}}return flow[ed]; }void dinic(int st,int ed) {int k;fl=0;cl=0;while(k=bfs(st,ed)){bk=1;fl+=k;cl+=dis[ed]*k;int p=ed;while(p!=st){a[pre[p]].d-=k;a[pre[p]^1].d+=k;p=a[pre[p]].x;}} }int main() {int T,n,m,k;scanf("%d",&T);while(T--){scanf("%d%d%d",&n,&m,&k);len=-1;sum=0;memset(first,-1,sizeof(first));s=0,t=2*n+1;for(int i=1;i<=n;i++)addedge(A(i),B(i),k,k,0);for(int i=1;i<=m;i++){int x,y,d;scanf("%d%d%d",&x,&y,&d);x++,y++;addedge(B(x),A(y),0,1,d);}// for(int i=0;i<len;i+=2)// printf("%d --> %d d = %d f = %d\n",a[i].x,a[i].y,a[i].d,a[i].f); dinic(s,t);if(fl==sum) printf("%d\n",cl);else printf("-1\n");}return 0; } LA2197 1 #include<cstdio> 2 #include<cstdlib> 3 #include<cstring> 4 #include<iostream> 5 #include<queue> 6 using namespace std; 7 8 const int N=300,INF=(int)1e9; 9 int s,t,len,first[N],dis[N],fa[N]; 10 bool c[N][N]; 11 struct node{ 12 int x,y,d,next; 13 }a[100010]; 14 queue<int> q; 15 16 int minn(int x,int y){return x<y ? x:y;} 17 18 int findfa(int x) 19 { 20 if(fa[x]!=x) fa[x]=findfa(fa[x]); 21 return fa[x]; 22 } 23 24 void ins(int x,int y) 25 { 26 a[++len].x=x;a[len].y=y;a[len].d=1; 27 a[len].next=first[x];first[x]=len; 28 a[++len].x=y;a[len].y=x;a[len].d=0; 29 a[len].next=first[y];first[y]=len; 30 } 31 32 int bfs(int st,int ed) 33 { 34 while(!q.empty()) q.pop(); 35 memset(dis,-1,sizeof(dis)); 36 q.push(st); 37 dis[st]=0; 38 while(!q.empty()) 39 { 40 int x=q.front();q.pop(); 41 for(int i=first[x];i!=-1;i=a[i].next) 42 { 43 int y=a[i].y; 44 if(a[i].d && dis[y]==-1) 45 { 46 dis[y]=dis[x]+1; 47 q.push(y); 48 } 49 } 50 } 51 return (dis[ed]!=-1); 52 } 53 54 int dfs(int x,int ed,int flow) 55 { 56 int r=0,p; 57 if(x==ed) return flow; 58 for(int i=first[x];i!=-1;i=a[i].next) 59 { 60 int y=a[i].y; 61 if(dis[y]==dis[x]+1 && a[i].d) 62 { 63 p=minn(flow-r,a[i].d); 64 p=dfs(y,ed,p); 65 r+=p; 66 a[i].d-=p; 67 a[i^1].d+=p; 68 } 69 if(r==flow) break; 70 } 71 if(!r) dis[x]=-1; 72 return r; 73 } 74 75 int dinic(int st,int ed) 76 { 77 int k,ans=0; 78 while(k=bfs(st,ed)) 79 ans+=dfs(st,ed,INF); 80 return ans; 81 } 82 83 int main() 84 { 85 int T; 86 scanf("%d",&T); 87 while(T--) 88 { 89 int n,m1,m2,x,y; 90 scanf("%d%d%d",&n,&m1,&m2); 91 s=0,t=2*n+1,len=-1; 92 memset(first,-1,sizeof(first)); 93 memset(c,0,sizeof(c)); 94 for(int i=1;i<=n;i++) fa[i]=i; 95 for(int i=1;i<=m1;i++) 96 { 97 scanf("%d%d",&x,&y); 98 c[x][y]=1; 99 } 100 for(int i=1;i<=m2;i++) 101 { 102 scanf("%d%d",&x,&y); 103 fa[findfa(x)]=findfa(y); 104 } 105 for(int i=1;i<=n;i++) fa[i]=findfa(i); 106 for(int i=1;i<=n;i++) 107 for(int j=1;j<=n;j++) 108 { 109 if(c[i][j]) ins(i,n+j); 110 else 111 { 112 for(int k=1;k<=n;k++) 113 if(fa[i]==fa[k] && c[k][j]) {ins(i,n+j);break;} 114 } 115 } 116 int rl=len; 117 for(int i=1;i<=n;i++) ins(s,i); 118 for(int i=n+1;i<=2*n;i++) ins(i,t); 119 // for(int i=0;i<=len;i+=2) printf("%d -- > %d %d\n",a[i].x,a[i].y,a[i].d); 120 int l=0,r=n*n; 121 while(l!=r) 122 { 123 int k=(l+r+1)>>1; 124 for(int i=0;i<=rl;i+=2) a[i].d=1,a[i^1].d=0; 125 for(int i=rl+1;i<=len;i+=2) a[i].d=k,a[i^1].d=0; 126 if(dinic(s,t)==n*k) l=k; 127 else r=k-1; 128 } 129 printf("%d\n",l); 130 } 131 return 0; 132 } hdu3081 1 #include<cstdio> 2 #include<cstdlib> 3 #include<cstring> 4 #include<iostream> 5 #include<queue> 6 using namespace std; 7 8 const int N=110,M=550,INF=(int)1e9; 9 int s,t,sl,len,first[N],dis[N],in[N],out[N],g[N],sk[N]; 10 bool vis[N]; 11 struct node{ 12 int x,y,d,next,id; 13 bool temp,bk; 14 }a[100010],b[M]; 15 queue<int> q; 16 int minn(int x,int y){return x<y ? x:y;} 17 18 void ins(int x,int y,int d,bool p) 19 { 20 a[++len].x=x;a[len].y=y;a[len].d=d; 21 a[len].next=first[x];first[x]=len; 22 if(!p) 23 { 24 a[++len].y=x;a[len].x=y;a[len].d=0; 25 a[len].next=first[y];first[y]=len; 26 } 27 } 28 29 bool bfs(int st,int ed) 30 { 31 while(!q.empty()) q.pop(); 32 memset(dis,-1,sizeof(dis)); 33 q.push(st);dis[st]=0; 34 while(!q.empty()) 35 { 36 int x=q.front();q.pop(); 37 for(int i=first[x];i!=-1;i=a[i].next) 38 { 39 int y=a[i].y; 40 if(a[i].d && dis[y]==-1) 41 { 42 dis[y]=dis[x]+1; 43 q.push(y); 44 } 45 } 46 } 47 return (dis[ed]!=-1); 48 } 49 50 int dfs(int x,int ed,int flow) 51 { 52 int r=0; 53 if(x==ed) return flow; 54 for(int i=first[x];i!=-1;i=a[i].next) 55 { 56 int y=a[i].y; 57 if(dis[y]==dis[x]+1 && a[i].d) 58 { 59 int p=minn(flow-r,a[i].d); 60 p=dfs(y,ed,p); 61 r+=p; 62 a[i].d-=p; 63 a[i^1].d+=p; 64 } 65 if(r==flow) break; 66 } 67 if(r==0) dis[x]=-1; 68 return r; 69 } 70 71 int dinic(int st,int ed) 72 { 73 int k,ans=0; 74 while(k=bfs(st,ed)) 75 ans+=dfs(st,ed,INF); 76 return ans; 77 } 78 79 void find(int x) 80 { 81 for(int i=first[x];i!=-1;i=a[i].next) 82 { 83 int y=a[i].y; 84 if(!vis[y] || !a[i].bk) continue; 85 a[i].bk=0; 86 find(y); 87 } 88 sk[++sl]=x,vis[x]=0; 89 } 90 91 int main() 92 { 93 int T,n,m,sum,cas=0;char c;bool bk; 94 scanf("%d",&T); 95 while(T--) 96 { 97 bk=1; 98 scanf("%d%d",&n,&m); 99 len=-1; 100 memset(first,-1,sizeof(first)); 101 memset(in,0,sizeof(in)); 102 memset(out,0,sizeof(out)); 103 s=0,t=n+1;sum=0; 104 for(int i=1;i<=m;i++) 105 { 106 scanf("%d%d %c",&b[i].x,&b[i].y,&c); 107 in[b[i].y]++;out[b[i].x]++; 108 if(c=='U') b[i].temp=1; 109 else b[i].temp=0; 110 b[i].bk=0; 111 } 112 for(int i=1;i<=n;i++) 113 { 114 int d=in[i]-out[i]; 115 if(d&1) {bk=0;break;} 116 if(d<0) ins(s,i,(-d)/2,0),sum+=(-d)/2; 117 if(d>0) ins(i,t,d/2,0); 118 } 119 if(bk) 120 { 121 for(int i=1;i<=m;i++) 122 { 123 if(!b[i].temp) continue; 124 ins(b[i].x,b[i].y,1,0); 125 b[i].id=len-1; 126 } 127 if(dinic(s,t)!=sum) bk=0; 128 } 129 if(cas) printf("\n");cas++; 130 if(!bk) printf("No euler circuit exist\n"); 131 else 132 { 133 for(int i=1;i<=m;i++) 134 { 135 if(b[i].temp) b[i].bk=a[b[i].id].d; 136 else b[i].bk=1; 137 } 138 len=-1; 139 memset(first,-1,sizeof(first)); 140 for(int i=1;i<=m;i++) 141 if(b[i].bk) ins(b[i].x,b[i].y,1,1); 142 else ins(b[i].y,b[i].x,1,1); 143 sl=0;memset(vis,1,sizeof(vis)); 144 for(int i=0;i<=len;i++) a[i].bk=1; 145 find(1); 146 for(int i=sl;i>=1;i--) printf("%d ",sk[i]);printf("\n"); 147 } 148 } 149 return 0; 150 } uva10735

?

題號(hào)題目題意題解備注
poj2396Budget一個(gè)n*m的矩陣,給定每一行的和以及每一列的和,然后給定多個(gè)限制,即某個(gè)格子的上下界,要求一個(gè)可行的方案。建n個(gè)點(diǎn)表示行,m個(gè)點(diǎn)表示列,原圖源匯點(diǎn)s、t。
s連到表示第i行的點(diǎn),上下界都為sum[i](行)
表示第i列的點(diǎn)連到t,上下界都為sum[i](列)
然后表示第i行的點(diǎn)x和表示第j行的點(diǎn)y中間連一條邊,上下界就是約束。

錯(cuò)了很久,注意:
1.邊數(shù)要足夠大
2.p數(shù)組一開始沒有清空
3.dfs的優(yōu)化(不斷找,用r儲(chǔ)存已用的流量)?快超級(jí)多。
上下界網(wǎng)絡(luò)流
可行流
矩陣模型
模板題
LA5095Transportation一個(gè)n個(gè)點(diǎn)、m條邊的有向圖,1為起點(diǎn),n為終點(diǎn),要從起點(diǎn)運(yùn)k個(gè)物體到終點(diǎn),每條邊的費(fèi)用與流量關(guān)系:f=ax^2,問最小費(fèi)用。重新開一個(gè)源點(diǎn),源點(diǎn)到1有一條流量為k、費(fèi)用為0的邊,然后跑最小費(fèi)用最大流,如果最大流等于k則可行。最小費(fèi)用最大流
f=ax^i(i為自然數(shù))模型
模板題
LA3487DuopolyA、B兩個(gè)公司要買一些資源(他們自己買的資源不會(huì)重復(fù)),一個(gè)資源只能賣給一個(gè)公司。問最大收益。????方法一?把每個(gè)詢問看成一個(gè)點(diǎn),然后A的詢問連源點(diǎn),B的詢問連匯點(diǎn),如果AB間的某個(gè)詢問有矛盾就在它們中間連一條無限大的邊,ans=sum-最小割。
????方法二:對(duì)于每個(gè)詢問,新建一個(gè)點(diǎn)x,如果是A就源點(diǎn)連向這個(gè)點(diǎn),流量為價(jià)錢p,然后連向這個(gè)詢問所要求買的資源c[i],流量為INF。
如果是B則反過來,連向匯點(diǎn)。
最小割
一個(gè)費(fèi)用/流量對(duì)應(yīng)多個(gè)點(diǎn)
模板題
LA5131Chips?Challenge給定一個(gè)矩陣,每個(gè)格子有三種情況——不能填、能填、一定要填,要求填最多的格子,使第i行的總和等于第i列的總和,并且填的格子數(shù)不能大于總數(shù)的A/B。構(gòu)圖:在表示第i行的點(diǎn)x和表示第i列的點(diǎn)y間連一條(y,x)的邊,費(fèi)用為1,然后跑最大費(fèi)用流。
詳見博客。
最大費(fèi)用循環(huán)流
模板題
LA2796Concert?Hall?Scheduling你有2個(gè)房間,有365天,有n個(gè)人找你租房,第i個(gè)人要從第xi到第yi天要一個(gè)房(任意一個(gè)),付wi的錢,求怎樣安排收的錢最多????建365個(gè)點(diǎn),連(i,i+1,2,0)的邊(流量2(2個(gè)房間),費(fèi)用0),源點(diǎn)連1,流量2費(fèi)用0,365連匯點(diǎn),流量2費(fèi)用0。然后對(duì)于一個(gè)詢問(xi,yi,wi),連(xi,yi+1,2,wi)的邊,注意是yi+1,不然yi這個(gè)點(diǎn)可能同時(shí)作為別人的起點(diǎn),然后重復(fù)就WA了。跑一遍最大費(fèi)用流。最大費(fèi)用流
區(qū)間模型
uva1515Pool?construction給一個(gè)m*n的矩陣,每個(gè)格子中是#和.兩個(gè)符號(hào)之一,分別代表草和洞。現(xiàn)在要將洞給圍起來(將草和洞分離),每條邊需花費(fèi)b元(即將一個(gè)洞包起來需要4邊,將2個(gè)連續(xù)的洞包起來需要6邊,省了2條邊)。有個(gè)特殊能力,能將洞變成草,花費(fèi)f。當(dāng)然也能將草變成洞,花費(fèi)d。圍起洞來需要多少花費(fèi)。矩陣四周最邊邊的格子都必須是草,即出現(xiàn)洞就必須轉(zhuǎn)草。s代表草,t代表洞;
對(duì)于每個(gè)點(diǎn)x,如果是草,建邊(s,x,0),(x,t,d);
如果是洞,建邊(s,x,f),(x,t,0)?
如果一定要選,那到另一個(gè)的流量就是INF(代價(jià)無窮大)

對(duì)于每對(duì)相鄰的點(diǎn)(x,y),建(x,y,b),(y,x,b)
這樣就可以保證當(dāng)x、y是不同的東西,最小割的時(shí)候就必須加上b的代價(jià),那就是洞包起來的代價(jià)。
二分圖模型
最小割
LA2197Paint?the?Roadsn個(gè)點(diǎn)m條邊的帶權(quán)有向圖,現(xiàn)在要將某些邊涂上顏色,使得每個(gè)點(diǎn)恰好在k個(gè)有顏色的環(huán)上,總費(fèi)用最小。題意->每個(gè)點(diǎn)每一秒流入和流出的流量都是k->最小費(fèi)用循環(huán)流
把一個(gè)點(diǎn)拆成兩個(gè)點(diǎn),這兩個(gè)點(diǎn)之間連一條邊,上下界都是k,然后跑有上下界的最小費(fèi)用循環(huán)流。
對(duì)于每條邊(x,y,k1,k2,f),拆成:(x,y,k1,k1,f)(再按上下界拆邊,即(s,y,k1,f)?(x,t,k1,f)),(y,x,k2-k1,-f),(s,y,k2-k1,0),(x,t,k2-f1,f),用k2的和判滿流。
最小費(fèi)用循環(huán)流
拆點(diǎn)
hdu3081Marriage?Match?IIn個(gè)女生與n個(gè)男生配對(duì),每個(gè)女生只能配對(duì)某些男生,有些女生相互是朋友,每個(gè)女生也可以跟她朋友能配對(duì)的男生配對(duì)。

每次配對(duì),每個(gè)女生都要跟不同的男生配對(duì)且每個(gè)女生都能配到對(duì)。問最多能配對(duì)幾輪。(n<=100)
二分答案k,用并查集建邊,每對(duì)可配對(duì)的男生與女生之間連一條流量為1的邊,源點(diǎn)到每個(gè)女生連一條k的邊,匯點(diǎn)連每個(gè)男生,流量為k。跑最大流。
WA了一中午,對(duì)拍都看不出錯(cuò),然后是一個(gè)i打成了x,淚目。
最大流
二分
uva10735Euler?Circuit給定一個(gè)混合圖(有有向邊和無向邊),然后要你求一條歐拉回路(遍歷所有邊后回到出發(fā)點(diǎn))。1.歐拉回路建圖,給無向邊定向。最終要是in[i]==out[i],那就先給無向邊隨便定向,d[i]=in[i]-out[i],若d[i]為奇數(shù)則無解(反一條邊,d[i]會(huì)變化2)。
??對(duì)于d[i]>0,則最多要改d[i]/2條入邊,(i,t,d[i]/2)
??對(duì)于d[i]<0,則最多要該(-d[i])/2條出邊,(s,i,(-d[i])/2)
??每條無向邊最多更改一次,(x,y,1)
??跑最大流,滿流則有解。

2.輸出歐拉回路(套圈算法)。隨便從一個(gè)點(diǎn)開始遍歷,走出一個(gè)圈,但是有一些邊可能還沒走,又有一個(gè)圈。做法就是起點(diǎn)開始遍歷,dfs遍歷其相鄰的點(diǎn),如果一個(gè)點(diǎn)沒有相鄰點(diǎn)了就壓到棧里。倒序輸出。
最大流
歐拉回路
構(gòu)圖

轉(zhuǎn)載于:https://www.cnblogs.com/KonjakJuruo/p/5560129.html

總結(jié)

以上是生活随笔為你收集整理的【网络流】网络流小总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

九九一级片 | 国产主播99 | 欧美成年人在线视频 | 国产福利电影网址 | 国产日韩一区在线 | 嫩小bbbb摸bbb摸bbb | 日日弄天天弄美女bbbb | 中文字幕乱码在线播放 | 欧美日韩伦理在线 | 97成人精品 | 精品久久久久久电影 | 亚洲精品国产成人 | 2021国产在线视频 | 日韩理论片在线观看 | 国产精品日韩高清 | 在线观看香蕉视频 | 久久久久久久久久久久久久电影 | avhd高清在线谜片 | 成人 亚洲 欧美 | 99久久日韩精品视频免费在线观看 | 香蕉久久久久久久 | 黄色av电影在线 | 狠狠躁日日躁 | 中文字幕av日韩 | 最近最新mv字幕免费观看 | 国产手机视频精品 | 国产精品久久久久久五月尺 | 99久热在线精品视频观看 | 最近高清中文字幕 | 九九九在线 | 日韩精选在线观看 | 欧美日本三级 | 欧美精品在线观看 | 视频在线观看入口黄最新永久免费国产 | 国产一级视屏 | 人人dvd| 亚洲欧洲一区二区在线观看 | 97在线成人| 在线91观看 | 在线看片日韩 | 久久久久久久综合色一本 | 久久国内视频 | 免费大片黄在线 | 激情视频区 | 天天草av| 激情图片qvod | 人人草在线视频 | 久久都是精品 | 99精品热视频 | 综合精品久久久 | 美女视频黄的免费的 | 91资源在线视频 | 色偷偷网站视频 | 丁香花在线视频观看免费 | 国产黄视频在线观看 | 激情综合交 | 91精品在线免费 | 亚洲免费av在线播放 | 九九热在线精品视频 | 亚洲综合黄色 | 久久精品在线 | 成人av一区二区在线观看 | 久久69av | 最近中文字幕在线播放 | 久久精品视频中文字幕 | 久草久草视频 | 亚洲国产字幕 | 超碰97网站| 亚洲高清视频在线观看 | 我爱av激情网 | 超碰免费成人 | 亚洲国产偷| 久久午夜影视 | 色婷婷激情五月 | 深夜视频久久 | 国产精品99久久免费观看 | www天天干 | 欧美日韩视频一区二区 | 亚洲成av片人久久久 | 亚洲综合视频在线播放 | 精品国产1区2区3区 国产欧美精品在线观看 | 久久久精品电影 | 国产电影一区二区三区四区 | 欧美国产日韩一区二区三区 | 欧美91在线| www.夜夜夜 | 免费看91的网站 | 日韩91精品 | 精品三级av | 中国黄色一级大片 | 久草免费资源 | 成人精品999 | ww视频在线观看 | 成人av高清在线观看 | 99精彩视频在线观看免费 | 亚洲精品玖玖玖av在线看 | 色综合天天色综合 | 午夜私人影院久久久久 | 欧美激情综合五月色丁香 | 天堂av在线网站 | 日韩在线中文字幕 | 中文字幕在线精品 | 国产a网站 | 久久精品一区二区三区国产主播 | 国产涩图| 日韩精品极品视频 | 久久久影片 | 在线黄网站 | 五月婷婷深开心 | 国产在线一区二区 | 成人黄色大片在线免费观看 | 九九精品视频在线 | 亚洲免费在线观看视频 | 亚洲第一区在线播放 | 四虎成人精品永久免费av九九 | 高清免费在线视频 | 久久久亚洲国产精品麻豆综合天堂 | 天天爽夜夜爽人人爽曰av | av高清在线观看 | 久久66热这里只有精品 | 久久不射电影院 | 丝袜+亚洲+另类+欧美+变态 | 美女网站色免费 | 国产麻豆成人传媒免费观看 | 日韩欧美在线视频一区二区三区 | 91久久偷偷做嫩草影院 | 国产亚洲成av人片在线观看桃 | 色网站在线免费 | 免费在线国产视频 | 日本久久片 | 一区中文字幕在线观看 | 国产伦理一区二区三区 | 很污的网站 | 天天综合操 | 成人h在线 | 欧美在线视频日韩 | 久久最新网址 | 日韩欧美久久 | 综合天堂av久久久久久久 | 午夜电影 电影 | 日韩免费一区二区 | 欧美精品一区二区性色 | 亚洲精品在线免费观看视频 | 天天操比| 九色一区二区 | 久久九九久久九九 | 欧美日韩视频 | 91精品久久久久久久91蜜桃 | 国产精品v欧美精品v日韩 | 69精品人人人人 | 日韩理论片 | 欧美三级高清 | 日韩,中文字幕 | 亚洲在线黄色 | 欧美视频在线观看免费网址 | 在线黄色毛片 | 色婷婷狠狠干 | 亚洲综合涩 | 国产原创在线视频 | 成人动漫视频在线 | 国产精品久久麻豆 | 国内外成人在线视频 | 美女福利视频网 | 一区二区三区电影在线播 | 国产录像在线观看 | 国产精品久久毛片 | 色九色| www.夜夜夜| 国产精品九九九 | av亚洲产国偷v产偷v自拍小说 | 丁香六月中文字幕 | 国产视频精品久久 | www亚洲一区| 国产日本在线播放 | 99久久精品免费 | 亚洲91中文字幕无线码三区 | 天天爱天天操天天爽 | www99精品 | 久草视频免费看 | 福利视频一区二区 | 综合色播| 午夜av一区二区三区 | 国产一级片一区二区三区 | 久草网首页 | 西西4444www大胆视频 | 免费看国产黄色 | 亚洲精品视频一二三 | 久操久| 国产精品久久久久久久久久久久午夜 | 色在线最新 | 在线观看的av网站 | 91免费视频黄| 日本中文字幕观看 | 日日干美女 | 丝袜美腿av | 久久久影片| 亚洲精品动漫在线 | 天堂va欧美va亚洲va老司机 | 久草视频免费观 | 在线观看a视频 | 黄色成年 | 国产视频精选 | 色94色欧美| 亚洲免费视频在线观看 | 欧美污网站| 国产中文在线播放 | 亚洲无吗视频在线 | 黄色国产精品 | 中文字幕乱在线伦视频中文字幕乱码在线 | 在线不卡中文字幕播放 | 手机av资源 | 性色av免费看 | 色婷婷视频在线观看 | 男女拍拍免费视频 | 国产精品久久在线 | 久草在线最新视频 | 久9在线| 国产免费久久久久 | 欧洲精品视频一区 | 在线观看av中文字幕 | 亚洲一区二区视频在线播放 | 探花视频在线版播放免费观看 | 精油按摩av| 精品久久1 | 亚洲国产剧情av | 91天堂素人约啪 | 探花系列在线 | 国产福利91精品 | 色妞色视频一区二区三区四区 | 夜夜躁日日躁狠狠久久av | 在线观看播放av | 久久天天躁狠狠躁夜夜不卡公司 | 91福利专区| 亚洲精品乱码白浆高清久久久久久 | 天堂在线视频中文网 | www.黄色片网站 | 国产福利免费在线观看 | 少妇视频一区 | 久久99国产综合精品免费 | 久久97精品| 国产视频中文字幕在线观看 | 九九热视频在线播放 | 国产精品久久久久999 | 久久av网| 欧美经典久久 | 激情网综合 | 久久精品国产一区二区电影 | 欧美大片www | 一区二区三区免费网站 | av中文字幕不卡 | 丝袜美女在线观看 | 国产 字幕 制服 中文 在线 | 午夜久久久久久久久久久 | 午夜18视频在线观看 | 91在线播放综合 | 国产福利在线 | 九九视频热 | 91最新中文字幕 | 国产成人免费 | 天天干.com | 99久久er热在这里只有精品15 | 国产资源网 | 精品国产一区二区三区久久久蜜臀 | 日韩一区二区三区免费视频 | 91麻豆.com | 亚洲精品免费在线视频 | 成人av网站在线播放 | 777久久久| 精品国偷自产在线 | 精品久久久久亚洲 | 久久99精品久久只有精品 | 黄色日视频 | 日韩免费在线观看视频 | 亚洲 欧美 精品 | 中中文字幕av在线 | 久久精品牌麻豆国产大山 | 国产精品视频久久久 | 一级黄色在线免费观看 | 视频福利在线 | 久久久福利 | 天天色天天综合网 | 亚洲人成在线电影 | 国内精品久久久久久久97牛牛 | 色午夜 | 日韩在线电影观看 | www最近高清中文国语在线观看 | 日日干天天射 | 特黄一级毛片 | 91视频 - v11av | 一区二区三区免费在线观看 | 亚洲专区视频在线观看 | 五月婷婷在线播放 | a黄在线观看 | 欧美一区日韩精品 | 欧美另类一二三四区 | 91精品国产欧美一区二区成人 | 日韩免费观看一区二区三区 | 欧美一二三四在线 | 亚洲国产资源 | 丁香六月婷婷开心 | 天天曰天天射 | a级片韩国| 亚州精品国产 | 久久久这里有精品 | 亚洲免费一级 | 波多野结衣电影一区二区 | 少妇自拍av | 三上悠亚在线免费 | 国产999精品 | 亚洲精品国内 | 免费看三级 | 国产精品久久片 | 中文区中文字幕免费看 | 天天色天天操综合 | 久久都是精品 | 激情五月播播久久久精品 | 国产精品麻豆果冻传媒在线播放 | 黄色特一级 | 欧美成人播放 | 成人小视频在线播放 | 免费v片 | 久久久婷| 婷婷久久网 | a黄色一级| 成人午夜在线观看 | 青草视频在线免费 | 9999毛片| 丁香午夜 | 人人揉人人揉人人揉人人揉97 | 久久伊人精品天天 | 国产成人精品一区二区三区福利 | 日日日天天天 | 在线亚洲欧美日韩 | 最新av网址大全 | 精品久久一二三区 | 99超碰在线播放 | 国产精品成人在线 | 精品在线视频一区二区三区 | 国产首页 | 麻豆视频入口 | 国产精品久久久久久久久久久久午夜 | 亚欧洲精品视频在线观看 | 婷婷五月在线视频 | 超碰av免费 | 国内精品久久久久久久久久久久 | 亚洲一区不卡视频 | 综合天天 | 国产精品久久久区三区天天噜 | 91精品久久久久久粉嫩 | 毛片随便看 | 国产精品久久婷婷六月丁香 | 99久久日韩精品免费热麻豆美女 | 国产精品岛国久久久久久久久红粉 | 91桃色在线免费观看 | 91久久国产自产拍夜夜嗨 | 日韩欧美视频在线观看免费 | 日韩爱爱片| 涩涩网站在线观看 | 国产色视频一区二区三区qq号 | 免费精品 | 国产精品免费久久久 | 欧美精品在线观看一区 | 国产精品国产三级国产aⅴ9色 | 欧美国产三区 | 亚洲精品伦理在线 | 色视频在线免费观看 | 黄色大片av | 国产精品一区二 | 国产精品久久一卡二卡 | 午夜在线免费观看视频 | 九九热在线视频免费观看 | 亚洲欧美国产精品久久久久 | 91在线看视频 | 99免费在线视频 | www.久久成人 | 成人av影视观看 | 中文字幕一区二区三区四区久久 | wwwwww国产| 国产成人777777| 精品999在线 | 亚洲在线a| 91资源在线 | www.国产精品 | 色91在线视频 | 福利二区视频 | www五月婷婷 | 少妇bbw搡bbbb搡bbbb | 日韩大片免费观看 | 日日夜夜噜 | 国产精品成久久久久三级 | www.成人精品| 91爱爱网址 | 日本精品视频一区二区 | 午夜精品久久久久久久99热影院 | 欧美va电影| 久久精品视频在线观看 | 91精品一区二区三区蜜桃 | 欧美久久久久久 | 日韩精品不卡 | 成人久久久久久久久 | 97福利在线 | 久久在线免费观看 | 久久久久国产精品厨房 | 青春草免费视频 | 久久久蜜桃一区二区 | 激情五月av| 91日韩精品一区 | 天天搞天天干 | 在线看片成人 | 日本一区二区免费在线观看 | 婷婷久月| 五月天综合网站 | 91探花国产综合在线精品 | 日日躁夜夜躁xxxxaaaa | 黄色大全视频 | 手机成人在线 | 久草在线免费色站 | 中文综合在线 | 久热久草 | 亚洲视频 在线观看 | 97网| 中文字幕在线看视频国产 | 国产麻豆剧传媒免费观看 | 青草视频免费观看 | 久久亚洲欧美 | 欧美性免费 | 成人精品影视 | 99久久超碰中文字幕伊人 | 日韩视频一区二区在线 | 色婷婷影视 | 天堂v中文| 久久久久中文 | 久久综合久久综合久久综合 | 狠狠干婷婷 | 成人综合日日夜夜 | 日日操日日操 | 国产一级精品绿帽视频 | 久久中国精品 | 久久精品一区二区三区四区 | 欧美国产一区在线 | 国产视频日韩 | 亚洲激情校园春色 | 成年人网站免费在线观看 | 91福利在线观看 | 自拍超碰在线 | 精品中文字幕在线 | 亚洲精品影视在线观看 | 亚洲一级黄色大片 | 91.精品高清在线观看 | 亚洲精品一区二区18漫画 | 91爱爱免费观看 | 在线观看网站av | 欧美一级在线观看视频 | 日韩在线观看中文字幕 | 999久久a精品合区久久久 | 成人午夜电影在线 | 国产成人一区二区三区在线观看 | 国产黄大片在线观看 | 成人动漫视频在线 | 亚洲精品乱码久久久久久蜜桃91 | 久色婷婷| 久久优 | 午夜成人免费电影 | 欧美日韩精品免费观看视频 | 天天天综合网 | 亚洲精品久久久久www | 中文在线字幕免费观看 | 国产精品美乳一区二区免费 | 国产三级视频 | 狠狠色丁婷婷日日 | 色诱亚洲精品久久久久久 | .国产精品成人自产拍在线观看6 | 91人人爽久久涩噜噜噜 | 成人av在线观 | 91丨九色丨国产在线观看 | 天天干 夜夜操 | 国内精品久久久久久久影视简单 | .精品久久久麻豆国产精品 亚洲va欧美 | 日韩精品高清视频 | 欧美一级电影在线观看 | 久久久www免费电影网 | 免费观看91 | 99久久日韩精品免费热麻豆美女 | 高清免费av在线 | 91亚洲精品久久久蜜桃 | 五月婷婷影视 | 超碰99人人 | 久久成 | 一区二区三区四区精品视频 | 91人人干| 91大神dom调教在线观看 | 欧美网址在线观看 | 亚洲 欧洲av | 黄色h在线观看 | 精品免费国产一区二区三区四区 | 亚洲欧美视频在线 | 一区 在线 影院 | 97超碰免费在线 | 97在线资源 | 黄色毛片观看 | 久热超碰| 嫩草伊人久久精品少妇av | 国产精品白虎 | 日韩在线观看一区 | 久久久综合精品 | 超碰人人射 | 在线观看不卡视频 | 超碰在线亚洲 | 欧美黑人性爽 | 色吧久久 | 超碰人人干人人 | 丝袜美腿亚洲 | 91在线入口 | 国产精品久久久久久久久蜜臀 | 在线欧美最极品的av | 色91在线视频 | 伊人黄 | 成人福利在线 | 2023av| 国产精品久久久久久久电影 | 免费午夜在线视频 | 欧美午夜精品久久久久久浪潮 | av在线影视 | 欧美日韩在线视频一区二区 | 亚洲精品久久久久www | 久久99热这里只有精品 | 亚洲欧洲av在线 | 波多野结衣视频一区 | 欧美日韩精品在线 | 91资源在线视频 | 日韩丝袜视频 | 国产九九热视频 | 久久99国产精品二区护士 | 日韩在线 一区二区 | 操操操日日日干干干 | 免费91在线 | 久久免费福利 | 中文免费在线观看 | 特级毛片爽www免费版 | 中文字幕资源网在线观看 | 可以免费观看的av片 | 99热精品国产一区二区在线观看 | 黄色精品国产 | 久久 精品一区 | 久久人人97超碰国产公开结果 | 中文字幕在线看视频国产 | 日韩视频www| 最近中文字幕在线中文高清版 | 婷婷丁香在线观看 | 91精品视频在线免费观看 | 99re久久资源最新地址 | 天天综合区 | 在线观看免费观看在线91 | 中文亚洲欧美日韩 | 999久久精品| 国产 欧美 日产久久 | 人人玩人人添人人澡超碰 | 在线精品视频免费播放 | 成人国产精品免费观看 | 一级黄色免费 | 国内成人综合 | 欧美性色网站 | 日本三级不卡视频 | 成人av电影免费在线播放 | 天天干天天搞天天射 | 中文字幕在线播放日韩 | 欧美亚洲国产精品久久高清浪潮 | 中文字幕在线免费观看 | 91黄色视屏 | 久久成人国产精品入口 | 999久久国精品免费观看网站 | 国产精品自在线 | 亚洲婷婷伊人 | 蜜臀久久99精品久久久无需会员 | 亚洲精品视频一 | 99c视频高清免费观看 | 色综合久久88色综合天天 | 久久久人| 超碰免费成人 | 国产精品青草综合久久久久99 | 亚洲区精品视频 | 在线免费观看视频一区 | 国产精品女 | av在线播放网址 | 久久精品国产免费看久久精品 | 久香蕉 | 久久久久免费精品国产 | 综合久久综合久久 | 丁香花中文字幕 | 天天操天天色天天射 | 97偷拍视频| 欧美人交a欧美精品 | 99久久婷婷国产综合精品 | 香蕉在线观看 | 久久久国产一区二区 | 成人在线视频你懂的 | 日韩一区正在播放 | 亚洲精品久久久久久久不卡四虎 | 黄a网| 99热高清 | 91av在线精品 | 亚洲精品99久久久久中文字幕 | 九九热在线免费观看 | 婷婷丁香激情 | 精品视频不卡 | 久久这里| 香蕉久草在线 | 亚洲一区精品人人爽人人躁 | 又色又爽又黄高潮的免费视频 | 中文字幕有码在线观看 | 午夜精品99久久免费 | 婷婷精品国产一区二区三区日韩 | 国产精品久久久久久久久久99 | 国产精品免费观看网站 | 日韩欧美99 | 麻豆视频在线看 | 丁香花在线视频观看免费 | 日韩在线字幕 | 国产精品久久久久久吹潮天美传媒 | 天天伊人狠狠 | 丰满少妇一级 | 久久涩视频 | 成年人在线免费视频观看 | av免费电影在线 | 欧美在线观看小视频 | 毛片网在线播放 | 天天操天天操天天操天天操天天操 | 午夜男人影院 | 黄a网站| 国产成人精品福利 | 蜜臀一区二区三区精品免费视频 | 国产91精品久久久久 | 亚洲永久在线 | 欧美乱淫视频 | 狠狠色婷婷丁香六月 | 欧美一区二区精美视频 | 99精品久久精品一区二区 | 蜜桃视频日韩 | 伊人色综合网 | 精品国产一区二区久久 | 超碰在线资源 | 久草在线视频在线 | 日韩欧美一区二区在线 | 欧美激情精品久久久久 | 中文字幕人成乱码在线观看 | 国产精品美女久久久免费 | 天天操天天射天天添 | 在线视频18在线视频4k | 欧美 日韩 久久 | 国产护士在线 | 特级毛片在线 | 日本午夜在线观看 | 精品国内| 国产污视频在线观看 | 国产伦理久久精品久久久久_ | 天天干天天上 | 欧美日韩国产一区二 | 欧美日韩精品免费观看视频 | 激情综合色综合久久 | 91av在线视频免费观看 | 久久久久久高潮国产精品视 | 国产特级毛片 | 九九视频在线播放 | 91在线精品视频 | 人人爽人人爽人人 | 99精品一级欧美片免费播放 | 成人app在线播放 | 日韩欧美一区二区三区黑寡妇 | 色综合久久综合网 | 夜夜躁天天躁很躁波 | 欧美精品久久久久久久久久丰满 | av网站免费看 | 国产三级精品三级在线观看 | 免费在线观看国产黄 | 日韩在线影视 | 亚洲国产午夜 | 色先锋资源网 | 蜜臀av性久久久久蜜臀av | 免费在线色电影 | 97在线影院| 在线观看中文字幕一区二区 | 在线观看av网| 久久久久久高清 | 国产午夜三级一区二区三 | 亚洲精品视频在线观看视频 | 亚洲干| 玖玖精品视频 | 在线观看成人网 | 亚洲综合婷婷 | 天天爱天天射 | www.狠狠操.com | 久久久亚洲国产精品麻豆综合天堂 | 亚a在线 | 999ZYZ玖玖资源站永久 | 久久福利国产 | 99精品在线免费在线观看 | 狠狠狠狠狠狠狠狠 | 毛片在线网 | 国产精品久久久av | 99热精品久久 | 国产字幕在线播放 | 久久久久久久国产精品影院 | 91黄站| 69精品| 国产黄视频在线观看 | 激情网五月婷婷 | av女优中文字幕在线观看 | 又色又爽又激情的59视频 | 国产日韩精品在线 | 色亚洲激情 | 久久久久国产精品www | 欧美日韩不卡在线观看 | 国产精品一区专区欧美日韩 | 99性视频 | 日韩在线视频免费观看 | 91av在线国产| 国产成人精品网站 | av三级av | 91自拍视频在线观看 | 夜又临在线观看 | 人人插人人射 | 亚洲天天摸日日摸天天欢 | 国产精品99精品 | 欧美在线视频二区 | 在线精品观看 | 亚洲精选在线 | 九九精品无码 | 欧美 日韩 国产 中文字幕 | 九九热在线观看视频 | 久久a免费视频 | 二区视频在线观看 | 久久99热精品这里久久精品 | 99国产精品一区二区 | 91视频免费看片 | 91高清在线 | 国产精品第7页 | 免费看十八岁美女 | 99国产在线观看 | 天天久久夜夜 | 天天舔夜夜操 | 国产视频在线免费观看 | 天天操天天是 | 四虎永久网站 | 99热国产在线中文 | 最新中文字幕在线资源 | 欧美一区中文字幕 | 国产精品视频免费看 | 久久久毛片 | 99久久99热这里只有精品 | 香蕉一区 | 国产成人av电影 | 在线观看岛国片 | 丝袜少妇在线 | 免费99精品国产自在在线 | 天天操天天操天天操天天操天天操天天操 | 久久久久久高潮国产精品视 | 91中文视频 | 久久伊人色综合 | 久久综合中文字幕 | 伊人五月天 | 精品自拍av | 最近中文字幕第一页 | 97在线观看免费 | av网站播放| 久久精精品 | 亚洲国产高清在线观看视频 | 99久久99精品| 午夜精品久久久久久久久久久久久久 | 草久久av| 国产v在线播放 | 九九精品视频在线 | 在线导航av| 国产在线精品一区 | 丁香av| 午夜精品导航 | 久久午夜色播影院免费高清 | 精品国产美女 | 日韩高清网站 | 国产精品久久久久久久午夜片 | 欧美日韩亚洲在线 | 91精品在线免费观看 | 国产精品久久久久久吹潮天美传媒 | 狠狠亚洲| 91免费黄视频 | 91亚州| 精品资源在线 | 九九精品视频在线看 | 99爱爱| 久久久久久国产精品免费 | 天天干,狠狠干 | 日韩久久午夜一级啪啪 | 91成人精品 | 天天摸天天弄 | 国产精品久久麻豆 | 色六月婷婷 | 成人黄色在线电影 | 欧美美女激情18p | 精品国产一区二区久久 | 91女子私密保健养生少妇 | 免费97视频 | 伊人手机在线 | 免费高清在线观看电视网站 | 久草视频2| 国产福利一区二区在线 | 久久天天躁夜夜躁狠狠85麻豆 | 午夜.dj高清免费观看视频 | 亚洲欧洲精品在线 | 国产69精品久久99的直播节目 | 美女性爽视频国产免费app | 亚洲精品日韩在线观看 | 天天插日日操 | 日韩免费一区二区在线观看 | 激情网站网址 | 日本精品xxxx | 狠狠色丁香婷婷综合久久片 | 欧美精品一二三 | 在线影院 国内精品 | 亚洲欧美激情精品一区二区 | 精品国产精品久久一区免费式 | 久久成人午夜 | 欧美日韩高清 | 久久狠狠干 | 天天激情天天干 | 亚洲永久精品一区 | 在线国产视频观看 | 欧美色图亚洲图片 | 96香蕉视频 | 久久精品欧美一区二区三区麻豆 | 日本久久免费视频 | 伊人国产在线观看 | 午夜18视频在线观看 | 看av免费网站 | 国产精品永久在线 | 国产成人一区二区三区免费看 | 97色se| 国产剧情av在线播放 | 五月婷婷毛片 | 天天做日日做天天爽视频免费 | 九九九热精品 | 视频一区二区视频 | 91豆花在线| 西西www444 | 91九色国产视频 | 亚洲天堂va | 99精品视频免费 | 亚洲涩涩网 | 国产欧美中文字幕 | 一区二区三区免费在线观看视频 | 国产99久久久精品 | 欧日韩在线视频 | 国产精美视频 | 黄色av成人在线 | 久草在线视频新 | 日韩精品国产一区 | 四虎亚洲精品 | 国产99亚洲 | 国产五月婷婷 | 91九色国产 | 探花视频网站 | 成人污视频在线观看 | 日韩一片| 操操综合网 | 黄色三级在线看 | 天天干天天拍天天操 | 国产性天天综合网 | 黄色av一级片 | 婷婷视频导航 | 成年人app网址 | 亚洲色图27p | 韩国av三级 | 日韩成人免费在线电影 | 一区二区三区日韩视频在线观看 | 免费国产在线视频 | 丁香花在线视频观看免费 | 人人搞人人干 | 人人艹视频 | 午夜影视一区 | 免费看搞黄视频网站 | 最近字幕在线观看第一季 | 欧美另类人妖 | 日韩在线观看精品 | 国产色在线 | 99九九视频| 天天摸日日操 | 最近中文字幕免费av | 蜜臀久久99精品久久久久久网站 | 波多野结衣视频一区 | 日韩视频二区 | 夜夜躁狠狠躁日日躁 | 亚洲清纯国产 | 亚洲精品乱码久久久久久蜜桃动漫 | 97**国产露脸精品国产 | 这里只有精品视频在线观看 | 欧美精品中文在线免费观看 | 中文字幕av最新 | 久草在线视频网 | 婷婷干五月| 国产精品久99 | 国产黄视频在线观看 | 超碰人人做 | 久久久久久久久亚洲精品 | 四虎永久国产精品 | 亚洲a色| 精品久久国产一区 | 国语黄色片 | 黄色三几片| 深夜视频久久 | a√资源在线 | 美女黄久久 | 97碰碰视频 | 91亚洲欧美激情 | av高清一区二区三区 | 久久 在线| 中文字幕成人在线观看 | 久久免费99精品久久久久久 | 狠狠狠色| 国产精品久久片 | 久久精品一区二区三区中文字幕 | 久久人人爽人人片av | 国产精品自产拍在线观看 | 天堂av影院 | 久久麻豆精品 | 亚洲精品久久久蜜桃 | 国产成人精品一区二区三区免费 | 欧美久久久久 | 国产爽妇网 | 丁香六月婷婷开心婷婷网 | a极黄色片 | 在线观看免费中文字幕 | 友田真希av | 91av福利视频 | 久久国产影院 | 操天天操| 日韩黄色在线观看 | 久久激情综合网 | 国产小视频91 | 开心激情婷婷 | 99日精品 | 日本性高潮视频 | 91九色网址| 久久久久久国产精品 | 黄色免费大全 | 久草视频国产 | 精品一区 在线 | 婷婷四房综合激情五月 | 又黄又爽的免费高潮视频 | 精品综合久久久 | 九九九在线观看 | 91在线看免费 | 不卡视频在线 | 国产小视频你懂的在线 | 日本韩国精品在线 | 国产黄在线看 | 99色在线视频 | 国产精品免费人成网站 | 久久国产精品久久w女人spa | 超碰九九 | 国产 一区二区三区 在线 | 国产精品久久久久久久免费大片 | 超碰国产人人 | 中文字幕一区二区在线观看 | av电影免费在线看 | 国产成人av| 欧美性生活一级片 | 精品国偷自产在线 | 97视频入口免费观看 | 日韩视频一 | 久久精品中文字幕少妇 | 精品女同一区二区三区在线观看 | 色综合天天综合 | 成人永久在线 | 成人久久18免费网站 | www亚洲一区| av电影在线不卡 | 国内精品久久久久久久久久久 | 国产成人一区二区精品非洲 | www毛片com| 三级黄色免费片 | 九九九国产 | 国产精品一区久久久久 | 欧美精品久久久久久久久久 | 91手机电视 | 视色网站 | 97在线看 | 成人av电影免费 | 欧美乱熟臀69xxxxxx | 午夜av免费看| a级国产乱理论片在线观看 特级毛片在线观看 | 伊人超碰在线 | 丝袜美腿在线视频 | 久久亚洲影院 | 久久久久久在线观看 | 9999在线观看| 午夜黄网| 国产在线不卡 | av日韩精品| 中文字幕不卡在线88 | 久久蜜桃av|