传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1449

题目简述:

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
题解:
设x为win,y为lose;
先让所有人后面比赛都会输,计算出一个preans,那么怎么处理会赢的请况呢?
很简单,就让一个人的win+1,lose-1,那么相对于之前就可以获得(c*(x+1)^2+d*(y-1)^2-c*x^2-d*y^2=2*c[i]*win[i]+c[i]+d[i]-2*d[i]*lose[i])
所以就在建一条这样的边就好了,推荐使用 zkw(速度快,代码短);
 #include<iostream>
#include<cstring>
#include<cstdio>
#define inf 0x7fffffff
#define maxn 1000000
int pre[maxn],v[maxn],cost[maxn],cap[maxn],lis[maxn];
int lose[],win[],in[],c[],d[],dis[],now[],sla[],mark[];
bool vis[];
int n,m,s,t,tot,ans;
using namespace std;
void ins(int a, int b, int c, int d)
{
tot++; pre[tot]=now[a]; now[a]=tot; v[tot]=b; cost[tot]=d; cap[tot]=c;
}
void insert(int a, int b, int c, int d)
{
ins(a,b,c,d); ins(b,a,,-d);
}
bool spfa()
{
int head=,tail=;
for (int i=s; i<=t; i++) dis[i]=inf;
memset(mark,,sizeof(mark));
lis[]=t; dis[t]=; mark[t]=;
while (head!=tail)
{
int x=lis[head]; mark[x]=; head++;
if(head==)head=;
for (int i=now[x]; i; i=pre[i])
{
if (dis[x]+cost[i^]<dis[v[i]] && cap[i^])
{
dis[v[i]]=dis[x]+cost[i^];
if (!mark[v[i]])
{
mark[v[i]]=;
tail++;
lis[tail]=v[i];
if(tail==)tail=;
}
}
}
}
// printf("%d\n",dis[s]);
if (dis[s]!=inf ) return true; else return false;
}
int dfs(int x, int f)
{
mark[x]=;
if (x==t) return f;
int w,used=;
for (int i=now[x]; i; i=pre[i])
{
if (!mark[v[i]] && cap[i] && dis[x]-cost[i]==dis[v[i]])
{
w=dfs(v[i],min(f-used,cap[i]));
cap[i]-=w; cap[i^]+=w;
ans+=w*cost[i];
used+=w; if (used==f) return f;
}
}
return used;
}
void zkw()
{
while(spfa())
{
mark[t]=;
while(mark[t])
{
memset(mark,,sizeof(mark));
dfs(s,inf);
}
}
}
int main()
{
scanf("%d%d",&n,&m); tot=; ans=;
for (int i=; i<=n; i++)
scanf("%d%d%d%d",&win[i],&lose[i],&c[i],&d[i]);
s=; t=n+m+;
for (int i=; i<=m; i++)
{
int u,v;
insert(s,i,,);
scanf("%d%d",&u,&v);
insert(i,u+m,,);
insert(i,v+m,,);
in[u]++; in[v]++;
}
for (int i=; i<=n; i++)
{
lose[i]+=in[i];
}
ans=;
for(int i=;i<=n;i++)
ans+=win[i]*win[i]*c[i]+lose[i]*lose[i]*d[i];
for (int i=; i<=n; i++)
for (int j=; j<=in[i]; j++)
{
//insert(i+m,t,1,c[i]*(2*win[i]+2*j-1)-d[i]*(2*lose[i]-2*j+1));
insert(i+m,t,,*c[i]*win[i]+c[i]+d[i]-*d[i]*lose[i]);
win[i]++; lose[i]--;
}
//printf("%d\n",ans);
zkw();
printf("%d\n",ans);
return ;
}
 
 
 
 

bzoj1449————2016——3——14的更多相关文章

  1. 2016.09.14,英语,《Using English at Work》全书笔记

    半个月时间,听完了ESLPod出品的<Using English at Work>,笔记和自己听的时候的备注列在下面.准备把每个语音里的快速阅读部分截取出来,放在手机里反复听. 下一阶段把 ...

  2. Murano Weekly Meeting 2016.06.14

    Meeting time: 2016.June.14 1:00~2:00 Chairperson:  Kirill Zaitsev, from Mirantis Meeting summary: 1. ...

  3. 2016.10.14,英语,《American Accent Training》

    这本书是讲述美语发音训练的.已经看了一段时间了,决定向周叶学习,记录读书笔记.计划每天花半个小时,学习3节左右的音频(按照CD TRACK),并完成训练. CD1 Track1 What is Acc ...

  4. nginx学习记录/2016.11.14

    nginx(engine X)是一个高性能的web服务器和反向代理服务器以及电子邮件代理服务器 由俄罗斯的程序设计师Igor Sysoev所开发 nginx+tomcat实现负载均衡 参考地址:htt ...

  5. 2016.11.14测试 长乐一中2014NOIP复赛模拟题 第一题。

    1.正确答案 [题目描述] 小H与小Y刚刚参加完UOIP外卡组的初赛,就迫不及待的跑出考场对答案. "吔,我的答案和你都不一样!",小Y说道,"我们去找神犇们问答案吧&q ...

  6. 2016.8.14安装myplayer心得

    安装mplayer时,我有两个os是not found状态,我在其他地方找到后 which mplayer,找到mplayer的配置界面,找到not found的部分,并且从usr/lib中找到相应的 ...

  7. 2016.9.14 JavaScript入门之七面向对象和函数

    1.JavaScript中的变量,可以是对象,具有相应的属性: 2.我们也能够使用构造函数创建对象.构造函数的函数给出了一个大写的名称,以使它清楚地表明它是一个构造函数. 在构造函数中,这个变量是指由 ...

  8. 2016.8.14 HTML5重要标签以及属性学习

    1.响应网格系统,这使得它很容易把元素放在行,并指定每个元素的相对宽度 . 要注意的是: 在使用网格布局系统之前,要不把布局的元素都添加到同一个<div>中,而且这个<div> ...

  9. 2016.8.14 HTML5重要标签及其属性学习

    1.移动端的CSS: 一般需要引入下面的外部样式表: <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/ ...

随机推荐

  1. 使用nodejs的net模块创建TCP服务器

    使用nodejs的net模块创建TCP服务器 laiqun@msn.cn Contents 1. 代码实现 2. 使用telnet连接服务器测试 3. 创建一个TCP的client 1. 代码实现 ; ...

  2. 虚拟ip

    网卡上增加一个IP: ifconfig eth0:1 192.168.0.1 netmask 255.255.255.0 删除网卡的第二个IP地址: ip addr del 192.168.0.1 d ...

  3. MBR区、DBR区、FAT区、DIR区和DATA区的区别

    来自:互联网 磁盘上的数据按照其不同的特点和作用大致可分为5部分:MBR区.DBR区.FAT区.DIR区和DATA区.我们来分别介绍一下: (1)MBR区(主引导扇区) MBR(Main Boot R ...

  4. android-------手写签名系统的设计与实现之实现画笔设置

    引自:http://www.xuebuyuan.com/1754358.html 既然我们实现了画布和画笔,也实现了手写,为了提高可用性,我们增加了对画笔风格的设置功能,这样就可以根据自己的需要选择画 ...

  5. Scroll View 深入

    转载自:http://mobile.51cto.com/hot-430409.htm 可能你很难相信,UIScrollView和一个标准的UIView差异并不大,scroll view确实会多一些方法 ...

  6. 序列化为XML

    java类序列化成xml 方法[转] 今天看了下JAVA序列化.还是一知半解.怎么也没有弄明白,怎么序列化成XML文件.处入半解状态.在网上找了很多,大部分是理论上的.没有实际的例子.功夫不负有心人, ...

  7. zencart_magiczoom

    mod_zencart_magiczoom使用   一.复制相应文件到相应目录. 二.安装sql文件. 三.按照正确命名上传商品图片,一般需要中图跟大图. 四.程序运行时会在images目录下创建ma ...

  8. (二)Jquery Mobile介绍以及Jquery Mobile页面与对话框

    Jquery Mobile介绍以及Jquery Mobile页面与对话框  一. Adobe Dreamweaver CS6 环境 最新版本的cs6会支持JM的使用,有自动提示功能,很强大.安装说明地 ...

  9. iOS navigationBar 的isTranslucent属性

    苹果文档: A Boolean value indicating whether the navigation bar is translucent (YES) or not (NO). The de ...

  10. bzoj3322 最大生成树+LCA

    题目大意:给个无向图,每条边有个限制,每个点最多能买入和卖出一定黄金:然后按顺序走过n个点,求每个卖出黄金的点最多能卖出多少黄金 一开始有点懵,想着怎么再图上做这个问题,后来知道要先建一棵最大生成树 ...