思路:队友贪心WA了,然后就没有然后了,自己也是第一次接触最小费用流的题。借这个题来学习一下,利用Spfa每次来找到一个最短的路径同时保存路径,每一次寻找最短路径就将这条路的最小费用流给剪掉,然后继续下次寻找最短路径。

附上代码,参考了网上,

#include<queue>
#include<cstdio>
#include<string>
#include<cstring>
#include<vector>
#include<iostream>
#include<algorithm>
#include<functional>using namespace std;const int maxn = 5e3 + 5;
const int INF = 0x3f3f3f3f;
struct Edge{int value, flow, to, rev;Edge(){}Edge(int a, int b, int c, int d) :to(a), value(b), flow(c), rev(d){}
};
vector<Edge> vec[maxn];
inline void Add(int from, int to, int flow, int value){vec[from].push_back(Edge(to, value, flow, vec[to].size()));vec[to].push_back(Edge(from, -value, 0, vec[from].size() - 1));
}
bool book[maxn];//用于SPFA中标记是否在queue中
int cost[maxn];//用于存费用的最短路径
int pre[maxn];//用于存前结点
int pree[maxn];//用于存钱结点的vector中的下标bool Spfa(int from, int to){memset(book, false, sizeof book);memset(cost, INF, sizeof cost);book[from] = true;//cout << cost[0] << " " << INF << endl;cost[from] = 0;queue<int>que;que.push(from);while (!que.empty()){int t = que.front();book[t] = false;que.pop();for (int i = 0; i < vec[t].size(); i++){Edge& e = vec[t][i];if (e.flow>0 && cost[e.to] > cost[t] + e.value){cost[e.to] = cost[t] + e.value;pre[e.to] = t;pree[e.to] = i;if (book[e.to] == false){que.push(e.to);book[e.to] = true;}}}}return cost[to] != INF;
}
int Work(int from, int to){int sum = 0;while (Spfa(from, to)){int mflow = INF;//SPFA找到最短路径的最小容量int flag = to;while (flag != from){mflow = min(mflow, vec[pre[flag]][pree[flag]].flow);flag = pre[flag];}flag = to;while (flag != from){//cout << flag << " " << pre[flag] << " " << mflow << " " << vec[pre[flag]][pree[flag]].value << endl;sum += vec[pre[flag]][pree[flag]].value*mflow;vec[pre[flag]][pree[flag]].flow -= mflow;vec[flag][vec[pre[flag]][pree[flag]].rev].flow += mflow;flag = pre[flag];}}return sum;
}
int main()
{ios::sync_with_stdio(false);int n, m, a, b; cin >> n >> m;for (int i = 1; i <= n; i++){cin >> a >> b;Add(i, a + n, 1, 0);Add(i, b + n, 1, 0);Add(0, i, 1, 0);}for (int i = 1; i <= m; i++){for (int j = 1; j <= 99; j += 2){Add(i + n, m + n + 1, 1, j);}}cout << Work(0, m + n + 1) << endl;return 0;
}

转载于:https://www.cnblogs.com/zengguoqiang/p/9442981.html

wannafly-day1 Problem A - Birthday相关推荐

  1. 编译vuejs html,VueJs(2)---VueJs开发环境的搭建和讲解index.html如何被渲染

    VueJs开发环境的搭建和讲解初始框架 有关如何搭建vue.js框架我这看了一篇文章,自己也根据它进行搭建环境. 接下来对初始的框架进行讲解,只讲index.html是如何被渲染出来的. 一.启动项目 ...

  2. noip2011提高组day1+day2解题报告

    Day1 T1铺地毯https://www.luogu.org/problem/show?pid=1003 [题目分析] 全部读入以后从最后一个往前找,找到一个矩形的范围覆盖了这个点,那这个矩形就是最 ...

  3. 2017.9.16队内互测——老年组Day1

    2017.9.16队内互测--老年组Day1 出题人:feather,MeiCo,Summer,Black Problem 1: 对于100%的数据,n<=1000 截图比较奇怪-还请见谅 简单 ...

  4. ZJOI2017 讲课Day1笔记

    额,参考一下大神的笔记.... 地址 http://www.cnblogs.com/ARZhu-NOIpAK/p/6596879.html Day1 2017-3-24 3:34:43 苟-- 富贵 ...

  5. 【培训】DAY1 软件测试概述

    推荐阅读: [培训]DAY1测试基础技能之软件测试概述 [培训]DAY2测试基础方法 [培训]DAY3测试基础技能 [培训]DAY4测试流程 [培训]DAY5 操作手册与BUG处理流程 [培训]DAY ...

  6. English Learning - Day1 L1考前复习 2023.2.6 周一

    English Learning - Day1 L1考前复习 2023.2.6 周一 1 单选题:The girl looks at me with a _____ expression. Maybe ...

  7. linux下yum错误:[Errno 14] problem making ssl connection Trying other mirror.

    所有的base 都要取消注释 mirrorlist 加上注释 另外所有的enable都要设为零 目录 今天是要yum命令安装EPEL仓库后 yum install epel-release 突然发现y ...

  8. A + B Problem

    1001: A + B Problem Description 计算 A + B. Input 多组测试数据,每组测试数据占一行,包括2个整数. Output 在一行中输出结果. Sample Inp ...

  9. Error:(49, 1) A problem occurred evaluating project ':guideview'. Could not read script 'https://r

    出现问题如下: Error:(49, 1) A problem occurred evaluating project ':guideview'. > Could not read script ...

  10. #418 Div2 Problem B An express train to reveries (构造 || 全排列序列特性)

    题目链接:http://codeforces.com/contest/814/problem/B 题意 : 有一个给出两个含有 n 个数的序列 a 和 b, 这两个序列和(1~n)的其中一个全排列序列 ...

最新文章

  1. 智源学者韩银和、蔡一茂入选2020年度国家杰出青年科学基金建议资助项目申请人名单...
  2. spring集成kafka
  3. UNITY 打APK是如何确定哪些资源有用哪些无用的
  4. python列表常用方法_第24p,必须掌握,列表的常用方法
  5. Android 高级编程【6个实战案例(附源码):刮刮卡、补间动画、逐帧动画、Fragment、RecyclerView、下拉刷新】
  6. 2013\Province_Java_B\1.世纪末的星期
  7. logstash filter grok 用法
  8. mediarecorder路径设置为localsocket_[基础教程]-04 NanUI 启动器 Bootstrap 的设置
  9. Maven报错Missing artifact jdk.tools:jdk.tools:jar:1.7
  10. datagridview显示每次点击都会往后追加_以前购彩每次投入上千,这次只花了18元,理性购彩反而催生1801万大奖...
  11. ADN中国团队參加微软的Kinect全国大赛获得三等奖
  12. python线性回归实例_python线性回归示例
  13. PyTorc 1.0 中文文档:扩展PyTorch
  14. 系统设计(三)——约会软件系统设计
  15. layui table行点击tr_layui的table单击行勾选checkbox功能方法
  16. 搜索引擎网站收录入口大全
  17. 公式冒号是什么意思_冒号是什么意思
  18. 织梦index.php被黑,织梦网站被黑的解决流程
  19. JSON Shema 校验JSON内容
  20. word2003,使用修订模式

热门文章

  1. Linux命令行截屏,Scrot:Linux 命令行截屏工具
  2. .Net 并发写入文件的多种方式
  3. SIFT特征原理与理解
  4. tomcat体系结构
  5. arcgis api for js实现克里金插值渲染图--不依赖GP服务
  6. poj 1504 Adding Reversed Numbers
  7. Struts2类型转换--浪曦视频第三讲
  8. Linux基础之vim文本编辑器
  9. 001-android eclipse 自动生成的程序
  10. 在 hibernate 中使用 proxool 数据库连接池