题目链接 : https://ac.nowcoder.com/acm/contest/206/A

  这个题去年有幸去秦皇岛参加集训,见过这道题,当时特别菜还不会网络流,现在学了一点发现这个网络流还是比较简单的。

  首先题意要求价值根据蜡烛数量有变化,因为数据不大,我们可以每个点多联几条变,写成第一区域连接汇点

  区域到汇点的流量为1,费用为1,3,5,7.。。。。,因为从小到大加和,和正好为x的平方,所以的边流量都为1,因为只可以走一次,最后从原点到汇点跑个网络流就可以了

  AC代码 :

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<algorithm>
#include<iostream>
#include<math.h>
#include<vector>
#include<queue>
using namespace std;
#define INT_MAX 0x73f3f3f
typedef struct w_w{
int eend;
int weight;
int liu;
int next;
}miao;
miao x[];
int head[];
int cnt;
int money[];
int bian[];
int dian[];
int vis[];
queue<int> q1;
int spfa(int s,int e){
memset(bian,-,sizeof(bian));
memset(dian,-,sizeof(dian));
for(int i=;i<=;i++){
money[i]=INT_MAX;
}
money[e]=INT_MAX;
while(q1.size()) q1.pop();
q1.push(s);
money[s]=;
while(q1.size()){
int dang=q1.front();
//printf("%d\n",dang);
q1.pop();
vis[dang]=;
for(int i=head[dang];i!=-;i=x[i].next){
int to=x[i].eend;
int w=x[i].weight;
if(x[i].liu>&&money[dang]+w<money[to]){
money[to]=money[dang]+w;
if(vis[to]==) q1.push(to);
vis[to]=;
bian[to]=i;
dian[to]=dang;
//printf("%d %d %d\n",dang,i,to);
//system("pause");
}
}
}
if(money[e]!=INT_MAX) return ;
else return ;
}
void add(int s,int e,int l,int w){
x[cnt].eend=e;
x[cnt].weight=w;
x[cnt].liu=l;
x[cnt].next=head[s];
head[s]=cnt++;
}
int main()
{
int m,n;
scanf("%d %d",&m,&n);
memset(head,-,sizeof(head));
cnt=;
int start=;
int eend=;
for(int i=;i<=m;i++){
int a,b;
scanf("%d %d",&a,&b);
add(,n+i,,);
add(n+i,,,);
add(n+i,a,,);
add(a,n+i,,);
add(n+i,b,,);
add(b,n+i,,);
}
for(int i=;i<=n;i++){
for(int j=;j<n+;j++){
add(i,eend,,*j+);
add(eend,i,,-(*j+));
}
}
int sum=;
while(spfa(start,eend)){
//printf("+++\n");
int minn=INT_MAX;
for(int i=eend;i!=start;i=dian[i]){
int k=bian[i];
//printf("+++%d\n",i);
minn=min(minn,x[k].liu);
}
sum+=minn*money[eend];
for(int i=eend;i!=start;i=dian[i]){
int k=bian[i];
x[k].liu-=minn;
x[k^].liu+=minn;
//printf("%d\n",k);
}
}
printf("%d\n",sum);
return ;
}

最新文章

  1. 我的MYSQL学习心得(六) 函数
  2. com/android/dx/command/dexer/Main : Unsupported major.minor version 52.0
  3. hihoCoder 1393 网络流三&#183;二分图多重匹配(Dinic求二分图最大多重匹配)
  4. 【翻译】hololens入门
  5. DataGridView控件添加数据时空白的可 错误情况
  6. dig out secrets beneath AirSig
  7. C# Json处理日期和Table
  8. ueditor 添加微软雅黑字体 异常“从客户端中检测到有潜在危险的 request.form值”,解决
  9. ExecuteNonQuery&amp;&amp; ExecuteQuery 区别
  10. Ubuntu中安装编译并测试HTK语音识别库
  11. 自定义ScrollViewer的Touch事件--触摸上下移动ScrollViewer滚动到指定位置
  12. hibernate 数据关联多对多 4.1
  13. [UWP-小白日记13]Composition动画
  14. SQL 游标的应用
  15. SSM框架中,controller的action返回参数给vue.js
  16. Numpy的基本概念
  17. PeopleSoft 启用多语言输入
  18. k64 datasheet学习笔记11---Port Control and Interrupts (PORT)
  19. Docker:Docker搭建Redis集群(6)
  20. VMware扩展Linux根目录磁盘空间(Centos版本)

热门文章

  1. hadoop单机配置
  2. [转]JS跨域总结
  3. Murano Weekly Meeting 2015.11.11
  4. swing线程机制
  5. Spring中的一些常用接口
  6. pat06-图5. 旅游规划(25)
  7. http 中的缓存
  8. DevExtreme 搭建Node.js开发环境
  9. IsPostBack详解
  10. StringMVC入门案例