Description

做了个噩梦,梦见我的 n 把刀到60级会二次变身,变成一个 对推6图有xi点贡献,刷大阪城有yi点贡献 的刀,于是要把刀分成两队一队刷大阪城另一队推6图 。 
但是有m对兄弟刀在同一队会有特殊的buff加成,加成值为wi,问怎样分队收益最大,最大值是多少。

Input

第一行两个整数n(刀的数目)(0<=n<=20000),m(兄弟刀的对数)(0<=m<=200000) 
接下来n行,每行两个整数xi,yi,分别表示第i把刀对推6图的贡献xi和对刷大阪城的贡献yi。 
接下来m行,每行三个整数u,v,wi,分别表示第u把刀和第v把刀是兄弟刀,在一队能产生wi的buff值。

Output

一行一个数字,表示最大收益

Sample Input

3 1 
1 10 
2 10 
10 3 
2 3 1000

Sample Output

1023

题解:显然一道最小割的题目,最好收入的一般套路就是sum减去最小割,然而最重要的是想清楚怎么建图,我们可以思考s为推6图,t为大阪城,将每个节点和s,t连对应权值的边,如果i和j之间有对应关系时就连一条双向边,这个图就可以满足题目的所以关系。选t就割和s的连边,选s就割和t的连边,如果同时刷的话中间的权显然就都得到了,如果分开刷的话,就需要把中间的也割掉,这样就形成割了。
  1. #include<iostream>
  2. #include<stdio.h>
  3. #include<stdlib.h>
  4. #include<algorithm>
  5. #include<queue>
  6. #include<cstring>
  7. const int MAXN=;
  8. using namespace std;
  9. struct edge{
  10. int first;
  11. int next;
  12. int cap;
  13. int to;
  14. }a[MAXN];
  15. int dis[MAXN],n,m,sum=,num=;
  16. int s,t;
  17. queue<int> q;
  18.  
  19. void addedge(int from,int to,int cap){
  20. a[++num].to=to;
  21. a[num].cap=cap;
  22. a[num].next=a[from].first;
  23. a[from].first=num;
  24. }
  25.  
  26. void link(int x,int y,int cap){
  27. addedge(x,y,cap),addedge(y,x,);
  28. }
  29.  
  30. bool bfs(){
  31. while(!q.empty()) q.pop();
  32. memset(dis,,sizeof(dis));
  33. dis[s]=;q.push(s);
  34. while(!q.empty()){
  35. int now=q.front();
  36. q.pop();
  37. for(int i=a[now].first;i;i=a[i].next){
  38. int to=a[i].to;
  39. if(dis[to]==&&a[i].cap>){
  40. dis[to]=dis[now]+;
  41. q.push(to);
  42. if(to==t) return ;
  43. }
  44. }
  45. }
  46. return ;
  47. }
  48.  
  49. int dfs(int now,int flow){
  50. if(now==t) return flow;
  51. int tag=;
  52. for(int i=a[now].first;i;i=a[i].next){
  53. int to=a[i].to;
  54. if(dis[to]==dis[now]+&&a[i].cap>){
  55. int minn=dfs(to,min(a[i].cap,flow-tag));
  56. a[i].cap-=minn;
  57. a[i^].cap+=minn;
  58. tag+=minn;
  59. if(tag==flow) return tag;
  60. }
  61. }
  62. return tag;
  63. }
  64.  
  65. int dinic(){
  66. int max_flow=;
  67. while(bfs()) max_flow+=dfs(s,<<);
  68. return max_flow;
  69. }
  70.  
  71. int main(){
  72. scanf("%d%d",&n,&m);s=,t=n+;
  73. for(int i=;i<=n;i++){
  74. int x,y;
  75. scanf("%d%d",&x,&y);
  76. sum+=(x+y);
  77. link(,i,x),link(i,t,y);
  78. }
  79. for(int i=;i<=m;i++){
  80. int x,y,z;
  81. scanf("%d%d%d",&x,&y,&z);
  82. link(x,y,z);link(y,x,z);
  83. sum+=z;
  84. }
  85. printf("%d",sum-dinic());
  86. return ;
  87. }
代码:

【CJOJ】为了博多的更多相关文章

  1. Android请求网络共通类——Hi_博客 Android App 开发笔记

    今天 ,来分享一下 ,一个博客App的开发过程,以前也没开发过这种类型App 的经验,求大神们轻点喷. 首先我们要创建一个Andriod 项目 因为要从网络请求数据所以我们先来一个请求网络的共通类. ...

  2. 一步步开发自己的博客 .NET版(11、Web.config文件的读取和修改)

    Web.config的读取 对于Web.config的读取大家都很属性了.平时我们用得比较多的就是appSettings节点下配置.如: 我们对应的代码是: = ConfigurationManage ...

  3. 一步步开发自己的博客 .NET版(10、前端对话框和消息框的实现)

    关于前端对话框.消息框的优秀插件多不胜数.造轮子是为了更好的使用轮子,并不是说自己造的轮子肯定好.所以,这个博客系统基本上都是自己实现的,包括日志记录.响应式布局.评论功能等等一些本可以使用插件的.好 ...

  4. 【原】Github+Hexo+NextT搭建个人博客

    摘要 GitHub 是一个开源项目的托管网站,相信很多人都听过.在上面有很多高质量的项目代码,我们也可以把自己的项目代码托管到GitHub,与朋友们共享交流.GitHub Pages 是Github为 ...

  5. 我为什么要写LeetCode的博客?

    # 增强学习成果 有一个研究成果,在学习中传授他人知识和讨论是最高效的做法,而看书则是最低效的做法(具体研究成果没找到地址).我写LeetCode博客主要目的是增强学习成果.当然,我也想出名,然而不知 ...

  6. 博客使用BOS上传图片

    1.博客平台的选定 从大学开始做个人主页算起,最开始是使用html,CSSS写简单的页面,后面大学毕业之后接触到了WordPress,就开始用WordPress搭建网站.现在还维护着一个农村网站.ht ...

  7. 在jekyll模板博客中添加网易云模块

    最近使用GitHub Pages + Jekyll 搭建了个人博客,作为一名重度音乐患者,博客里面可以不配图,但是不能不配音乐啊. 遂在博客里面引入了网易云模块,这里要感谢网易云的分享机制,对开发者非 ...

  8. iOS controller解耦探究实现——第一次写博客

    大学时曾经做过android的开发,目前的工作是iOS的开发.之前自己记录东西都是通过自己比较喜欢的笔记类的应用记录下了.直到前段时一个哥们拉着我注册了一个博客.现在终于想明白了,博客这个东西受众会稍 ...

  9. 中文 iOS/Mac 开发博客列表

    中文 iOS/Mac 开发博客列表 博客地址 RSS地址 OneV's Den http://onevcat.com/atom.xml 一只魔法师的工坊 http://blog.ibireme.com ...

随机推荐

  1. 数论 Day 13

    数论_CRT(中国剩余定理)& Lucas (卢卡斯定理) 前言 又是一脸懵逼的一天. 正文 按照道理来说,我们应该先做一个介绍. 中国剩余定理 中国剩余定理,Chinese Remainde ...

  2. javascript合并两个数组

    在开发的过程中,我们很多时候会遇到需要将两个数组合并成一个数组的情况出现. var arr1 = [1, 2, 3]; var arr2 = [4, 5, 6]; // 将arr1和arr2合并成为[ ...

  3. JDK1.8的HashMap数据结构及红黑树

    在JDK1.6,1.7中,HashMap的实现都是用基础的“拉链法”去实现,即数组+链表的形式.如下图:通过不同的hash值,来对数据进行分配存储. 关于HashMap的Entry长度,可以参考htt ...

  4. Unity3D_02_基类MonoBehaviour/自带函数以及脚本执行的生命周期

    导引: 其中Time,Input,Physics都是Unity中的全局变量.GameObject是游戏中的基本物件.GameObject是由Component组合而成的,GameObject本身必须有 ...

  5. .NET Conf 2019日程(北京时间)

    一年一度的 .NET Conf马上就要开始了,我将日程简易的翻译了一下,并且时间全部转换为北京时间,以方便国内.NETer. 日程 第1天 (北京时间9月24日) .NET Conf 2019 基调 ...

  6. Java Synchronized Method This Static Class Object 区别

    1. 必须基于对象 Synchronized Method 和 Synchronized(this) 块,除了范围小点 (方法和块),没差别都是阻塞整个对象 - 如果对象有多个 Synchronize ...

  7. 基于Babylon.js编写宇宙飞船模拟程序1——程序基础结构、物理引擎使用、三维罗盘

    计划做一个宇宙飞船模拟程序,首先做一些技术准备. 可以访问https://ljzc002.github.io/test/Spacetest/HTML/PAGE/spacetestwp2.html查看测 ...

  8. 品Spring:详细解说bean后处理器

    一个小小的里程碑 首先感谢能看到本文的朋友,感谢你的一路陪伴. 如果每篇都认真看的话,会发现本系列以bean定义作为切入点,先是详细解说了什么是bean定义,接着又强调了bean定义为什么如此重要. ...

  9. Eureka参数配置->Server端参数

    1.基本参数 参数 默认值 说明 eureka.server.enable-self-preservation true 是否开启自我保护模式 eureka.server.renewal-percen ...

  10. append追加的html片段,添加点击事件没有反应,解决!

    对于追加的元素来说,属于未来展现的内容,我们此时不能使用一般点击事情处理,需要用未来事件绑定. 例如:我点击车牌号显示车辆详情,如下绑定. //绑定未来元素 $("body").d ...