【BZOJ 1449】 1449: [JSOI2009]球队收益 (最小费用流)
1449: [JSOI2009]球队收益
Time Limit: 5 Sec Memory Limit: 64 MB
Submit: 841 Solved: 483Description
Input
Output
一个整数表示联盟里所有球队收益之和的最小值。Sample Input
3 3
1 0 2 1
1 1 10 1
0 1 3 3
1 2
2 3
3 1Sample Output
43HINT
Source
【题意】
给定n支球队,第i支球队已经赢了win[i]场,输了lose[i]场,接下来还有m场比赛,每个球队最终的收益为Ci∗x[i]^2+Di∗y[i]^2,其中x[i]为最终的胜场,y[i]为最终的负场,求最小化收益。
【分析】
先差分,再拆边。
注意,输赢都有贡献,普通做法不行。直接当成那些比赛所有人都输,那只要计算赢的那个人的贡献。
然后差分:
赢k-1场:c[i]*(win[i]+(k-1))^2+d[i]*(sm[i]+lose[i]-(k-1))^2
赢k场:c[i]=(win[i]+k)^2+d[i]*(sm[i]+lose[i]-k)^2
相减得到赢第k场:c[i]*(2*win[i]-(2*k-1))-d[i]*(2*(lose[i]+sm[i])-(2*k-1))
这是单调的,所以把原本的贡献+最大费用流就好了。
可以膜Po姐:http://blog.csdn.net/PoPoQQQ/article/details/46619517
1 #include<cstdio> 2 #include<cstdlib> 3 #include<cstring> 4 #include<iostream> 5 #include<algorithm> 6 #include<queue> 7 using namespace std; 8 #define Maxn 5010 9 #define Maxm 1010 10 #define INF 0xfffffff 11 12 int mymin(int x,int y) {return x<y?x:y;} 13 14 int win[Maxn],lose[Maxn],c[Maxn],d[Maxn],sm[Maxn]; 15 16 struct node 17 { 18 int x,y,f,c,o,next; 19 }t[Maxm*100]; 20 int len,first[Maxn*2]; 21 22 void ins(int x,int y,int f,int c) 23 { 24 t[++len].x=x;t[len].y=y;t[len].f=f;t[len].c=c; 25 t[len].next=first[x];first[x]=len;t[len].o=len+1; 26 t[++len].x=y;t[len].y=x;t[len].f=0;t[len].c=-c; 27 t[len].next=first[y];first[y]=len;t[len].o=len-1; 28 } 29 30 queue<int > q; 31 int st,ed; 32 int flow[Maxn*2],pre[Maxn*2],dis[Maxn*2]; 33 bool inq[Maxn*2]; 34 bool bfs() 35 { 36 while(!q.empty()) q.pop(); 37 // memset(dis,-1,sizeof(dis)); 38 for(int i=1;i<=ed;i++) dis[i]=INF; 39 memset(inq,0,sizeof(inq)); 40 flow[st]=INF;q.push(st);dis[st]=0; 41 inq[st]=1; 42 while(!q.empty()) 43 { 44 int x=q.front(); 45 for(int i=first[x];i;i=t[i].next) if(t[i].f>0) 46 { 47 int y=t[i].y; 48 if(dis[y]>dis[x]+t[i].c) 49 { 50 dis[y]=dis[x]+t[i].c; 51 pre[y]=i; 52 flow[y]=mymin(flow[x],t[i].f); 53 if(!inq[y]) 54 { 55 q.push(y); 56 inq[y]=1; 57 } 58 } 59 } 60 q.pop();inq[x]=0; 61 } 62 if(dis[ed]==INF) return 0; 63 return 1; 64 } 65 66 int sum=0; 67 int max_flow() 68 { 69 while(bfs()) 70 { 71 int x=ed; 72 sum+=flow[ed]*dis[ed]; 73 int a=flow[ed]; 74 while(x!=st) 75 { 76 t[pre[x]].f-=a; 77 t[t[pre[x]].o].f+=a; 78 x=t[pre[x]].x; 79 } 80 } 81 printf("%d\n",sum); 82 } 83 84 void output() 85 { 86 for(int i=1;i<=len;i+=2) 87 printf("%d -> %d %d %d\n",t[i].x,t[i].y,t[i].f,t[i].c); 88 } 89 90 int main() 91 { 92 int n,m; 93 scanf("%d%d",&n,&m); 94 for(int i=1;i<=n;i++) scanf("%d%d%d%d",&win[i],&lose[i],&c[i],&d[i]); 95 st=n+m+1;ed=st+1; 96 memset(sm,0,sizeof(sm)); 97 for(int i=1;i<=m;i++) 98 { 99 int x,y; 100 scanf("%d%d",&x,&y); 101 ins(x,n+i,1,0); 102 ins(y,n+i,1,0); 103 ins(n+i,ed,1,0); 104 sm[x]++;sm[y]++; 105 } 106 for(int i=1;i<=n;i++) 107 { 108 for(int j=1;j<=sm[i];j++) ins(st,i,1,c[i]*(2*win[i]+2*j-1)-d[i]*(2*(sm[i]+lose[i])-(2*j-1))); 109 sum+=c[i]*win[i]*win[i]+d[i]*(lose[i]+sm[i])*(lose[i]+sm[i]); 110 } 111 max_flow(); 112 return 0; 113 }
View Code
2017-04-01 08:20:09
转载于:https://www.cnblogs.com/Konjakmoyu/p/6654405.html
【BZOJ 1449】 1449: [JSOI2009]球队收益 (最小费用流)相关推荐
- BZOJ1449[JSOI2009]球队收益BZOJ2895球队预算——最小费用最大流
题目描述 输入 输出 一个整数表示联盟里所有球队收益之和的最小值. 样例输入 3 3 1 0 2 1 1 1 10 1 0 1 3 3 1 2 2 3 3 1 样例输出 43 提示 要求总费用最低考虑 ...
- bzoj1449 [JSOI2009]球队收益
Description Input Output 一个整数表示联盟里所有球队收益之和的最小值. Sample Input 3 3 1 0 2 1 1 1 10 1 0 1 3 3 1 2 2 3 3 ...
- [JSOI2009]球队收益
题目 这题好神啊 我们发现一个球队的总比赛场数是确定的,设第\(i\)支球队一共进行了\(s_i\)场比赛 于是这个球队的收益就是\(c_i\times x^2+d_i(s_i-x)^2\) 我们拆开 ...
- [JSOI2009]球队收益 Solution
题意:有nnn个球队,如果一支球队胜场为xix_ixi,负场为yiy_iyi,那么他们的奖金即为Ci×xi2+Di×yi2C_i\times x_i^2+D_i\times y_i^2Ci×xi ...
- 【BZOJ-14492895】球队收益球队预算 最小费用最大流
1449: [JSOI2009]球队收益 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 648 Solved: 364 [Submit][Status ...
- bzoj乱刷计划2 19/20
前言 话说第一个乱刷计划很顺利地完成了 感觉写成一个题表的形式还是很支持的 于是我决定再开一个.. 打算 依然是可以做自己没做过的题,也可以复习做过的.同时尽量学一些自己不会的吧 乱刷计划2 3158 ...
- [NetworkFlow]网络流建模相关
流 网络流问题本质上是线性规划问题的应用之一,线性规划问题的标准形式是给出一组等式约束和不等式约束,要求最优化一个线性函数. 在流问题中,变量以流量的形式出现在问题中,我们给出一个流网络(以有向图的形 ...
- WC2007 剪刀石头布【补集转化+比赛问题费用流】
题目描述: N个点的竞赛图,已知一部分比赛结果,求安排剩下比赛的胜负情况,使得三元环的数量最大(A胜B,B胜C,C胜A).N<=100 题目分析: 直接统计三元环并不好做,考虑非三元环的情况,必 ...
- 51NOD 1449 砝码称重(贪心+进制思想)
题目连接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1449 1449 砝码称重 题目来源: CodeForces 基 ...
最新文章
- NeHe OpenGL第三十九课:物理模拟
- SQL Server 2008中Analysis Services的新特性——深入SQL Server 2008
- poj1655Multiplication Puzzle
- 在Metro App中显示Toast notification
- sp_MSforeachtable简介; 遍历数据库中的所有表运行命令
- 如何使用计算机管理来为硬盘分区,电脑如何硬盘分区合理_电脑硬盘分区的基本步骤-win7之家...
- disable_irq/enable_irq使用不匹配
- Autofac 依赖注入框架 使用
- k3 审核流程图_金蝶K3系统操作流程图
- 数据挖掘(Data Mining)扫盲笔记
- 计算机视觉硕士课程南京大学,南京大学计算机系研究生课程文库
- HashMap底层结构
- Win10蓝牙开关不显示,任务栏不显示蓝牙图标解决方案
- 2022年12月最新快速批量删除微博内容_新版本如何批量删除微博以前发过的博文内容
- 精彩回顾 | 阿里云APM城市技术行·深圳站
- rh2288v3服务器硬盘故障,RH2288H V3服务器出现0x02000007告警
- b站百万Up主分享如何做内容
- CAD导出PDF线条很粗怎样设置?
- java代码自动抠图_Opencv java实现人脸抠图和行为识别
- html播放韰 寸 频,js根据文字获取首字母案例,直接复制在html中即可查看效果
热门文章
- 白鹭引擎增加点击事件实例
- C语言 | 内存对齐02 - 为什么会有内存对齐?它解决了什么问题
- STM32H743+CubeMX-定时器TIM输出PWM(PWM Generation模式)+ 中断
- java8 stream 分组_Java 8 中 Map 骚操作之 merge() 的用法
- Linux学习笔记-Makefile优化之头文件依赖
- c++ 使用nacos_想自学Maven?推荐Maven极简高速入门及常规使用
- mysql Windows导入sql 失败
- 软考 计算机网络,软考-计算机网络总复习
- java for循环前面label_Java 实例
- php open gl,Open GL 资料 01