bzoj1449[jsoi2009]球队收益

SilverNebula      2022-02-08     561

关键词:

Time Limit: 5 Sec  Memory Limit: 64 MB
Submit: 741  Solved: 423

Description

技术分享

Input

技术分享

Output

一个整数表示联盟里所有球队收益之和的最小值。

Sample Input

3 3
1 0 2 1
1 1 10 1
0 1 3 3
1 2
2 3
3 1

Sample Output

43

HINT

技术分享

Source

 

最小费用最大流。

  比赛无论胜负都会给球队带来收益,使得建边极为困难。考虑转化问题,首先假设每场比赛的结果是“两方都输”,以此为初始状态,之后决策某个队伍胜利,则获得的收益为“赢的收益-输的收益”。

  1 #include<iostream>
  2 #include<cstdio>
  3 #include<algorithm>
  4 #include<cmath>
  5 #include<queue>
  6 #include<cstring>
  7 using namespace std;
  8 const int INF=1e8;
  9 const int mxn=9000;
 10 int read(){
 11     int x=0,f=1;char ch=getchar();
 12     while(ch<0 || ch>9){if(ch==-)f=-1;ch=getchar();}
 13     while(ch>=0 && ch<=9){x=x*10+ch-0;ch=getchar();}
 14     return x*f;
 15 }
 16 struct edge{
 17     int from,v,nxt;
 18     int f,w;
 19 }e[mxn<<1];
 20 int hd[mxn],mct=1;//
 21 void add_edge(int u,int v,int c,int w){
 22     e[++mct].v=v;e[mct].from=u;e[mct].nxt=hd[u];e[mct].f=c;e[mct].w=w;hd[u]=mct;return;
 23 }
 24 //
 25 int n,m;
 26 int S,T;
 27 int ans=0;
 28 int win[mxn],lose[mxn],c[mxn],d[mxn];
 29 //
 30 int dis[mxn];
 31 bool inq[mxn];
 32 int pre[mxn<<1];
 33 void SPFA(int s){
 34     memset(dis,0x3f,sizeof dis);
 35     memset(pre,-1,sizeof pre);
 36     queue<int>q;
 37     dis[s]=0;
 38     inq[s]=1;
 39     q.push(s);
 40     while(!q.empty()){
 41         int u=q.front();q.pop();inq[u]=0;
 42         for(int i=hd[u];i;i=e[i].nxt){
 43             if(!e[i].f)continue;
 44             int v=e[i].v;
 45             if(dis[v]>dis[u]+e[i].w){
 46                 dis[v]=dis[u]+e[i].w;
 47                 pre[v]=i;//记录前驱边 
 48                 if(!inq[v]){
 49                     inq[v]=1;
 50                     q.push(v);
 51                 }
 52             }
 53         }
 54     }
 55     return;
 56 }
 57 void maxflow(int s,int t){
 58     SPFA(s);
 59     while(pre[t]!=-1){
 60         int tmp=INF;
 61         for(int i=pre[t];i!=-1;i=pre[e[i].from])
 62             tmp=min(tmp,e[i].f);
 63         ans+=dis[t]*tmp;
 64         for(int i=pre[t];i!=-1;i=pre[e[i].from]){
 65             e[i].f-=tmp;
 66             e[i^1].f+=tmp;
 67         }
 68         SPFA(s);
 69     }
 70     return;
 71 }
 72 int a[mxn],b[mxn];
 73 int main()
 74 {
 75     int i,j,u,v;
 76     n=read();m=read();
 77     for(i=1;i<=n;i++){
 78         win[i]=read();lose[i]=read();
 79         c[i]=read();d[i]=read();
 80     }
 81     for(i=1;i<=m;i++){
 82         a[i]=read();b[i]=read();
 83         ++lose[a[i]];++lose[b[i]];
 84     }
 85     for(i=1;i<=n;i++){//假设全部都输掉 
 86         ans+=c[i]*win[i]*win[i];
 87         ans+=d[i]*lose[i]*lose[i];
 88     }
 89     S=0;T=m+n+2;
 90     for(i=1;i<=m;i++){
 91         add_edge(S,i,1,0);
 92         add_edge(i,S,0,0);
 93         add_edge(i,m+a[i],1,0);
 94         add_edge(m+a[i],i,0,0);
 95         add_edge(i,m+b[i],1,0);
 96         add_edge(m+b[i],i,0,0);
 97         //a
 98         int cost=c[a[i]]*(2*win[a[i]]+1)-d[a[i]]*(2*lose[a[i]]-1);
 99         add_edge(m+a[i],T,1,cost);
100         add_edge(T,m+a[i],0,-cost);
101         win[a[i]]++;lose[a[i]]--;
102         //b
103         cost=c[b[i]]*(2*win[b[i]]+1)-d[b[i]]*(2*lose[b[i]]-1);
104         add_edge(m+b[i],T,1,cost);
105         add_edge(T,m+b[i],0,-cost);
106         win[b[i]]++;lose[b[i]]--;
107     }
108     maxflow(S,T);
109     printf("%d
",ans);
110     return 0;
111 }

 

bzoj1449/2895[jsoi2009]球队收益/球队预算最小费用最大流

【BZOJ2895】球队预算Description在一个篮球联赛里,有n支球队,球队的支出是和他们的胜负场次有关系的,具体来说,第i支球队的赛季总支出是Ci*x^2+Di*y^2,Di<=Ci。(赢得多,给球员的奖金就多嘛)其中x,y分别表示这只球队本赛季的... 查看详情

网络流暂结(还差很多额)

...zoj1565:[NOI2009]植物大战僵尸最大权闭合子图bzoj1449:[JSOI2009]球队收益最小费用最大流(拆方)bzoj2502 查看详情

bzoj1449&&2895球队预算[费用流]

球队预算TimeLimit:10Sec  MemoryLimit:256MB[Submit][Status][Discuss]Description  在一个篮球联赛里,有n支球队,  球队的支出是和他们的胜负场次有关系的,具体来说,第i支球队的赛季总支出是Ci*x^2+Di*y^2,Di<=Ci。(赢得多,给球... 查看详情

bzoj1443:[jsoi2009]游戏game

1443:[JSOI2009]游戏GameTimeLimit:10SecMemoryLimit:162MBSubmit:1334Solved:613[Submit][Status][Discuss]DescriptionInput输入数据首先输入两个整数N,M,表示了迷宫的边长。接下来N行,每行M个字符,描述了迷宫。Output若小AA能够赢得游戏,则输出一行"WIN... 查看详情

bzoj2257:[jsoi2009]瓶子和燃料

2257:[Jsoi2009]瓶子和燃料TimeLimit: 10Sec  MemoryLimit: 128MBDescriptionjyy就一直想着尽快回地球,可惜他飞船的燃料不够了。 有一天他又去向火星人要燃料,这次火星人答应了,要jyy用飞船上的瓶子来换。jyy的飞船上共... 查看详情

bzoj1452:[jsoi2009]count

DescriptionInputOutputSampleInputSampleOutput12HINT  题目传送门 话说这好像是我第一次做树状数组的题树状数组裸题,还是二维的,多一层for而已 代码如下:#include<cmath>#include<cstdio>#include<cstring>#include< 查看详情

bzoj-2257:[jsoi2009]瓶子和燃料(中国剩余定理)

2257:[Jsoi2009]瓶子和燃料TimeLimit: 10Sec  MemoryLimit: 128MBSubmit: 1583  Solved: 965[Submit][Status][Discuss]Descriptionjyy就一直想着尽快回地球,可惜他飞船的燃料不够了。 有一天他又去向火星人要 查看详情

bzoj1560jsoi2009火星藏宝图[dp]

火星藏宝图TimeLimit:10Sec  MemoryLimit:64MB[Submit][Status][Discuss]Description  Input  Output  SampleInput  410  1120  101010  3560  5330SampleOutput  -4HINT  1<=M<=2000,2<=N<=100000 查看详情

bzoj1452:[jsoi2009]count

PS:c<=100(原谅像我一样眼瞎的人吧这题就是一个二维树状数组的模板啊,然后不会,然后学了学,然后好像没难度,自己看代码就会了。。#include<cstdio>#include<iostream>#include<cstring>#include<cstdlib>#include<algorith... 查看详情

bzoj1443[jsoi2009]游戏game

DescriptionInput输入数据首先输入两个整数N,M,表示了迷宫的边长。接下来N行,每行M个字符,描述了迷宫。Output若小AA能够赢得游戏,则输出一行"WIN",然后输出所有可以赢得游戏的起始位置,按行优先顺序输出每行一个,否则输出... 查看详情

bzoj1558[jsoi2009]等差数列

传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1558【题解】这题恶心死人了啊。。网络上题解很多都是看代码看代码。。真是太不负责任了。。我这里详细说一下吧。。题解在代码下面。#include<stdio.h>#include<string.h>#include&... 查看详情

bzoj2257:[jsoi2009]瓶子和燃料数论:裴蜀定理

2257:[Jsoi2009]瓶子和燃料TimeLimit:10Sec  MemoryLimit:128MBSubmit:1326  Solved:815[Submit][Status][Discuss]Descriptionjyy就一直想着尽快回地球,可惜他飞船的燃料不够了。有一天他又去向火星人要燃料,这次火星人答应了,要jyy用飞船... 查看详情

[bzoj1452][jsoi2009]count

来自FallDream的博客,未经允许,请勿转载,谢谢。 有一个n*m的矩阵,每个点有一个权值。需要支持两种操作:1)改变一个点的权值2)查询一个矩形内权值为c的个数n,m<=300q<=200000权值<=100权值有点小吧?那就每种权值开一... 查看详情

bzoj1443[jsoi2009]游戏game

AC通道:http://www.lydsy.com/JudgeOnline/problem.php?id=1443分析:对于这种棋子在棋盘上走来走去,只能走相邻的格子的问题,感觉还是挺好玩的...  然后好玩归好玩,可是有点不会做啊.  貌似棋盘上相邻格子这种不断移动的问题,都大概能... 查看详情

bzoj:1443:[jsoi2009]游戏game

原题链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1443反正不看题解我是完全想不出系列……先把棋盘黑白染色,也就是同一对角线上颜色相同,使得一个格子上下左右都不同色。然后我们会发现,某一个人所走的全部格子颜色都... 查看详情

bzoj2257:[jsoi2009]瓶子和燃料

Descriptionjyy就一直想着尽快回地球,可惜他飞船的燃料不够了。 有一天他又去向火星人要燃料,这次火星人答应了,要jyy用飞船上的瓶子来换。jyy的飞船上共有N个瓶子(1<=N<=1000),经过协商,火星人只要其中的K个。jyy将K... 查看详情

bzoj2257:[jsoi2009]瓶子和燃料

Descriptionjyy就一直想着尽快回地球,可惜他飞船的燃料不够了。 有一天他又去向火星人要燃料,这次火星人答应了,要jyy用飞船上的瓶子来换。jyy的飞船上共有N个瓶子(1<=N<=1000),经过协商,火星人只要其中的K个。jyy将K... 查看详情

bzoj1821jsoi2010group部落划分group

1821:[JSOI2010]Group部落划分GroupTimeLimit: 10Sec  MemoryLimit: 64MBSubmit: 3064  Solved: 1449[Submit][Status][Discuss]Description聪聪研究发现,荒岛野人总是过着群居的生活,但是,并不是整个荒岛上的所 查看详情