codevs 1028 花店橱窗布置
2017-02-24 18:35
411 查看
网络流二分图匹配题目描述 Description假设以最美观的方式布置花店的橱窗,有F束花,V个花瓶,我们用美学值(一个整数)表示每束花放入每个花瓶所产生的美学效果。为了取得最佳的美学效果,必须使花的摆放取得最大的美学值。输入描述 Input Description第一行为两个整数F,V(F<=V<=100)接下来F行每行V个整数,第i行第j个数表示第i束花放入第j个花瓶的美学值。输出描述 Output Description一个整数,即最大美学值。样例输入 Sample Input2 210 05 2样例输出 Sample Output12
#include<cstdio> #include<cstring> #include<iostream> #include<queue> using namespace std; #define INF 99999999 int n,m,c[250][250],v[250][250],s,t,pre[500]; bool spfa(){ bool vis[205]={0}; int dis[205]; memset(dis,6,sizeof(dis)); queue<int>q; q.push(s); vis[s]=1; dis[s]=0; int k; while(!q.empty()){ k=q.front(); q.pop(); vis[k]=0; for(int i=0;i<=t;i++) if(v[k][i]&&dis[i]>c[k][i]+dis[k]){ dis[i]=c[k][i]+dis[k]; pre[i]=k; if(!vis[i]){ q.push(i); vis[i]=1; } } } return dis[t]!=dis[204]; } int maxflow(){ int ans=0; while(spfa()){ for(int i=t;i!=s;i=pre[i]){ ans+=c[pre[i]][i]; v[pre[i]][i]--; v[i][pre[i]]++; } } return -ans; } int main(){ scanf("%d%d",&n,&m); s=0; t=n+m+1; memset(v,0,sizeof(v)); v[s][s]=1; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ scanf("%d",&c[j+n][i]); c[i][j+n]=-c[j+n][i]; v[i][j+n]++; c[j+n][t]=0; v[j+n][t]=1; } c[s][i]=0; v[s][i]=1; } cout<<maxflow()<<endl; }
相关文章推荐
- codevs 1028 花店橱窗布置 最小费用最大流
- 【codevs1028】花店橱窗布置(费用流)
- codevs 1028 花店橱窗布置 KM算法
- CODE[VS]1028 花店橱窗布置
- codevs1028 花店橱窗布置 KM算法
- 【codevs1028】花店橱窗布置 费用流(EK)
- 【codevs1028】花店橱窗布置 费用流(dinic)
- wikioi 1028 花店橱窗布置 最大权匹配
- 1028 花店橱窗布置 (带权二分图的最大匹配)
- codevs 1028 花店橱窗布置
- 【wikioi】1028花店橱窗布置
- codevs 1028 花店橱窗布置 (KM)
- 【CodeVS 1028】 花店橱窗布置
- AC日记——花店橱窗布置 codevs 1028
- 1028 花店橱窗布置
- 洛谷 P1854 花店橱窗布置 【dp】
- [luoguP1854] 花店橱窗布置(DP)
- 花店橱窗布置
- 花店橱窗布置(IOI)
- [Tyvj 1124]花店橱窗布置