国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

【codevs1907】[網(wǎng)絡(luò)流24題]方格取數(shù)3

2019-11-08 02:59:28
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

最小割= =這道題都是做最小割例題來(lái)講的,終于真正寫(xiě)了一次. 先黑白染色 源點(diǎn)向黑點(diǎn)連容量為num的邊 黑點(diǎn)向白點(diǎn)連容量為inf的邊 白點(diǎn)向匯點(diǎn)連容量為nun的邊 跑最小割,也就是最大流 建圖很簡(jiǎn)單但是很難理解,我的理解就是為了把他們分開(kāi)選取了最小的割,剩下的圖中的點(diǎn)就是不連通的了,感覺(jué)比賽的時(shí)候出一道最小割絕對(duì)做不出來(lái)啊QAQ,感覺(jué)最小割的建圖太難yy了.

#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<algorithm>#include<queue>using namespace std;const int N=2000,inf=0x3f3f3f3f;int pic[50][50],num[N],cur[N],p[N],d[N],head[N];int n,m,t,s,te,sz,tot;struct edge{ int u,v,cap,flow,next;}e[20010];queue<int>q;void add(int u,int v,int cap){ e[++te].u=u; e[te].v=v; e[te].flow=0; e[te].cap=cap; e[te].next=head[u]; head[u]=te;}void insert(int u,int v,int cap){add(u,v,cap),add(v,u,0);}void bfs(){ memset(d,0,sizeof(d)); while(!q.empty())q.pop(); q.push(t); while(!q.empty()) { int v=q.front(); for (int i=head[v];i;i=e[i].next) { int u=e[i].v; if (e[i].cap==0&&!d[u]) { d[u]=d[v]+1; q.push(u); } } q.pop(); }}int augment(){ int a=inf,x=t; while(x!=s) { a=min(e[p[x]].cap-e[p[x]].flow,a); x=e[p[x]].u; } x=t; while(x!=s) { e[p[x]].flow+=a; e[p[x]^1].flow-=a; x=e[p[x]].u; } return a;}int isap(){ int flow=0,x=s; copy(head,head+n+1,cur); memset(num,0,sizeof(num)); bfs(); for (int i=1;i<=n;i++) num[d[i]]++; while(d[s]<n) { if (x==t) { flow+=augment(); x=s; } int ok=0; for (int i=cur[x];i;i=e[i].next) { int v=e[i].v; if (e[i].cap>e[i].flow&&d[v]+1==d[x]) { p[v]=i; ok=1; cur[x]=i; x=v; break; } } if (!ok) { if (--num[d[x]]==0)break; int mx=n-1; for (int i=head[x];i;i=e[i].next) { int v=e[i].v; if (e[i].cap>e[i].flow)mx=min(mx,d[v]); } ++num[d[x]=mx+1]; cur[x]=head[x]; if (x!=s)x=e[p[x]].u; } } return flow;}int main(){ cin>>n>>m; te=1,sz=n*m,s=sz+1,t=sz+2,tot=0; for (int i=1;i<=n;i++) { for (int j=1;j<=m;j++) { scanf("%d",&pic[i][j]); tot+=pic[i][j]; if ((i+j)&1) { insert(s,(i-1)*m+j,pic[i][j]); if (i>1)insert((i-1)*m+j,(i-2)*m+j,inf); if (i<n)insert((i-1)*m+j,i*m+j,inf); if (j>1)insert((i-1)*m+j,(i-1)*m+j-1,inf); if (j<m)insert((i-1)*m+j,(i-1)*m+j+1,inf); } else insert((i-1)*m+j,t,pic[i][j]); } } n=t;// for (int i=2;i<=te;i+=2)// cout<<e[i].u<<' '<<e[i].v<<' '<<e[i].cap<<endl; cout<<tot-isap(); }
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 辽宁省| 垣曲县| 福安市| 中方县| 昌吉市| 台山市| 库伦旗| 武隆县| 裕民县| 织金县| 连平县| 夏津县| 蚌埠市| 五莲县| 奉节县| 榆中县| 津南区| 抚州市| 海安县| 中西区| 双流县| 郯城县| 长葛市| 常熟市| 师宗县| 山东| 清远市| 基隆市| 兴山县| 嘉祥县| 沙湾县| 嵩明县| 呈贡县| 盐城市| 甘肃省| 托克托县| 许昌县| 巴林左旗| 天峻县| 榆中县| 郴州市|