網路流題目最有意思的地方就是構圖了,畢竟套模板每個人都會的
現在有乙個矩陣,已知前i行元素之和a[i](1<=i<=n),前j列元素之和b[j](1<=j<=m),求乙個可行的矩陣,且矩陣每個元素在區間[1,20]內。
這也算是含上下界的網路流了,但是顯然,如果將每個元素都減一,就是普通的最大流了,矩陣元素值在區間[0,19]內。
首先求出第i行元素之和r[i],第j列元素之和c[j],
然後就是建圖,每行化為乙個結點1~n,每列化為乙個結點n+1~n+m
源點到1~n,分別連一條邊,容量為r[i]-m
n+1~n+m到匯點,分別連一條邊,容量為c[i]-n
1~n到n+1~n+m,分別連一條容量為19的邊
這樣跑一發網路流
1 #include2 #include3 #include4 #include5 #include6 #includeview code7 #include8 #include9 #include10 #include11 #include
12 #include13
#define maxn 1000
14#define maxm 2000
15#define inf (1<<30)
16#define eps 0.000001
17#define all(x) x.begin(),x.end()
18#define ins(x) inserter(x,x.begin())
19using
namespace
std;
20const
int inf = 0x3f3f3f3f;21
inti,j,k,n,m,x,y,t,num,w,cas,s,t,maxflow,u;
22struct
edgenode
23edge[maxm];
27int
edge,head[maxn],ps[maxn],dep[maxn],r[maxn],c[maxn],tt;
28int
ans[maxn][maxn];
2930
void add_edge(int x,int y,int
c)31
44/*
關於這個模板:
45edge為前向星的邊數,所以需要初始化edge和head陣列
46n表示有n個點,這個版無所謂點從0開始還是從1開始,s表示源點,t表示匯點
47很好的乙個是,這個版的dfs使用的是模擬棧,防止爆棧
48*/
4950
int dinic(int n,int s,int
t)5168}
69}70}
71if(dep[t]==-1)break;72
73for(i=s,top=0;;)//
dfs部分
7486
87for(j=head[i];j!=-1;j=edge[j].next)//
找當前點所指向的點
88if(edge[j].cap&&dep[i]+1==dep[edge[j].to]) break;89
90if(j!=-1)91
95else
96101
}102
}103
return
res;
104}
105106
intmain()
107122 tt=n+m+1
; 123 pre=0
;124
for (i=1;i<=m;i++)
125130
for (i=1;i<=n;i++)
131136
}137
138 maxflow=dinic(tt+1,0
,tt);
139//
cout<140
for (i=1;i<=n;i++)
141148
}149 printf("
matrix %d\n
",cas);
150for (i=1;i<=n;i++)
151156 printf("
%d\n
",ans[i][m]+1
);157
}158
if (cas!=t) printf("\n"
);159
}160
return0;
161 }
UVa11082 矩陣解壓 網路流學習
為什麼這樣是對的呢?這裡我自己還是沒分析出來,借用大佬們的思路吧。建邊容量的選擇 因為網路流中是允許0流的,所以我們將所有元素減1,對應每行之和就是減c,每列減r,中間最大容量就是0 19,輸出時加一即可。模型建立的選擇 這樣建模是常用的矩陣建模之一,學習學習 首先,每個x節點只有乙個入流,多個出流...
網路流 最大流
網路流 題記 網路流是最近講過的最迷演算法 網路流 network flows 是一種模擬水流的解決問題方法,與線性規劃密切相關。非常重視選手在網路流上的建模技巧,畫圖是非常關鍵的。1 最大流 問題引入 有n條溝渠,與水坑s t相連,匯聚成m個點,第i條溝渠的水流的流量為c i 每乙個點的流入量和流...
網路流(最大流)
我們圍繞一道題來講解吧 藍橋杯 演算法訓練 網路流裸題 首先,何為網路流最大流問題?可行流 對於每條路線 u,v 上給定乙個實數f u,v 滿足 0 f u,v c u,v 則稱f u,v 為路線 u,v 的流量。而對於一組具有源點和匯點,且總流出量 總流入量,則稱為網路中的一條可行流。拿例子來說 ...