博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 3435A new Graph Game(网络流之最小费用流)
阅读量:6552 次
发布时间:2019-06-24

本文共 1755 字,大约阅读时间需要 5 分钟。

题目地址:

这题刚上来一看,感觉毫无头绪。

。再细致想想。。

发现跟我做的前两道费用流的题是差点儿相同的。

能够往那上面转换。

建图基本差点儿相同。仅仅只是这里是无向图。建图依旧是拆点,推断入度出度。最后推断是否满流,满流的话这时的费用流是符合要求的。输出。不能满流的话,输出NO。

代码例如以下:

#include 
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;const int INF=0x3f3f3f3f;int head[3000], source, sink, cnt, flow, cost, num;int d[3000], vis[3000], pre[3000], cur[3000];queue
q;struct node{ int u, v, cap, cost, next;}edge[10000000];void add(int u, int v, int cap, int cost){ edge[cnt].v=v; edge[cnt].cap=cap; edge[cnt].cost=cost; edge[cnt].next=head[u]; head[u]=cnt++; edge[cnt].v=u; edge[cnt].cap=0; edge[cnt].cost=-cost; edge[cnt].next=head[v]; head[v]=cnt++;}int spfa(){ memset(d,INF,sizeof(d)); memset(vis,0,sizeof(vis)); int minflow=INF, i; q.push(source); d[source]=0; cur[source]=-1; while(!q.empty()) { int u=q.front(); q.pop(); vis[u]=0; for(i=head[u];i!=-1;i=edge[i].next) { int v=edge[i].v; if(d[v]>d[u]+edge[i].cost&&edge[i].cap) { d[v]=d[u]+edge[i].cost; minflow=min(minflow,edge[i].cap); cur[v]=i; if(!vis[v]) { q.push(v); vis[v]=1; } } } } if(d[sink]==INF) return 0; flow+=minflow; cost+=minflow*d[sink]; for(i=cur[sink];i!=-1;i=cur[edge[i^1].v]) { edge[i].cap-=minflow; edge[i^1].cap+=minflow; } return 1;}void mcmf(int n){ while(spfa()); if(flow==n) printf("%d\n",cost); else printf("NO\n");}int main(){ int t, n, m, i, j, a, b, c; scanf("%d",&t); num=0; while(t--) { num++; scanf("%d%d",&n,&m); memset(head,-1,sizeof(head)); cnt=0; source=0; sink=2*n+1; flow=0; cost=0; for(i=1;i<=n;i++) { add(source,i,1,0); add(i+n,sink,1,0); } while(m--) { scanf("%d%d%d",&a,&b,&c); add(a,b+n,1,c); add(b,a+n,1,c); } printf("Case %d: ",num); mcmf(n); } return 0;}

转载地址:http://pfnco.baihongyu.com/

你可能感兴趣的文章
consule服务注册和发现 安装 部署
查看>>
多个帐户都用root 来登录 怎么看另一个用户使用的那些命令
查看>>
Redis小记
查看>>
Map集合案例
查看>>
《FPGA全程进阶---实战演练》第十一章 VGA五彩缤纷
查看>>
C# for循环①护栏长度 ②广场砖面积 ③判断闰年平年
查看>>
mysql数据库中,查看数据库的字符集(所有库的字符集或者某个特定库的字符集)...
查看>>
LintCode刷题——打劫房屋I、II、III
查看>>
第七次课程作业
查看>>
C++ 文本查询2.0(逻辑查询)
查看>>
Objective-C学习总结-13协议1
查看>>
web学习方向
查看>>
寒假训练营第四次作业
查看>>
SQLServer 维护脚本分享(05)内存(Memory)
查看>>
A*算法实现
查看>>
第一周 从C走进C++ 002 命令行参数
查看>>
【java】itext pdf 分页
查看>>
看看这个电脑的配置
查看>>
用户自定义控件(.ascx)
查看>>
[转]【NoSQL】NoSQL入门级资料整理(CAP原理、最终一致性)
查看>>