题目链接

戳我

\(Solution\)

我们发现这道题目并不好做,因为要考虑两个因素对答案的影响。于是我们假设接下来的\(m\)场比赛双方都输了。这要我们就只要考虑赢一场对答案的影响了,那每赢一场输的数量就会减少\(1\).所以我们来化简一下式子:

\[c*(x+1)^2-d*(y-1)^2-c*x^2-d*y^2=2*c*x-2*d*y+c+d
\]

\(x\)为赢的数量,\(y\)为输的数量

我们对于这个发现不能直接的算贡献,于是直接拆边做费用流就好了,最后答案就是全输之后的答案加上费用流即可

\(Code\)

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int read(){
int x=0,f=1;
char c=getchar();
while(c<'0'||c>'9')
f=(c=='-')?-1:1,c=getchar();
while(c>='0'&&c<='9')
x=x*10+c-'0',c=getchar();
return x*f;
}
struct node{
int to,next,v,w;
}a[1000001];
int dis[10001],f[10001],pre[10001],fa[10001],s,t,n,m,head[10001],cnt,x,y,z,c,win[10001],lost[10001],vis[10001],C[10001],D[10001];
void add(int x,int y,int c,int v){
a[++cnt].to=y,a[cnt].next=head[x],a[cnt].v=c,a[cnt].w=v,head[x]=cnt;
a[++cnt].to=x,a[cnt].next=head[y],a[cnt].v=0,a[cnt].w=-v,head[y]=cnt;
}
queue < int > q;
int spfa(){
q.push(s);
memset(dis,127,sizeof(dis));
memset(f,0,sizeof(f));
f[s]=1,dis[s]=0;
int inf=dis[s+1];
while(!q.empty()){
int now=q.front();
q.pop();
f[now]=0;
for(int i=head[now];i;i=a[i].next){
int v=a[i].to;
if(dis[v]>dis[now]+a[i].w&&a[i].v){
dis[v]=dis[now]+a[i].w,pre[v]=i,fa[v]=now;
if(!f[v])
f[v]=1,q.push(v);
}
}
}
if(dis[t]!=inf)
return 1;
return 0;
}
int ans1,ans,res;
void answer(){
while(spfa()){
int minx=2147483647;
for(int i=t;i!=s;i=fa[i])
minx=min(minx,a[pre[i]].v);
ans+=minx,ans1+=dis[t]*minx;
for(int i=t;i!=s;i=fa[i])
a[pre[i]].v-=minx,(pre[i]%2)?a[pre[i]+1].v+=minx:a[pre[i]-1].v+=minx;
}
}
int main(){
n=read(),m=read(),s=0,t=n+m+1;
for(int i=1;i<=n;i++)
win[i]=read(),lost[i]=read(),C[i]=read(),D[i]=read();
for(int i=1;i<=m;i++)
x=read(),y=read(),add(s,i,1,0),add(i,x+m,1,0),add(i,y+m,1,0),vis[x]++,vis[y]++;
for(int i=1;i<=n;i++)
lost[i]+=vis[i],res+=C[i]*win[i]*win[i]+D[i]*lost[i]*lost[i];
for(int i=1;i<=n;i++)
for(int j=1;j<=vis[i];j++)
add(i+m,t,1,C[i]*win[i]*2-D[i]*lost[i]*2+C[i]+D[i]),lost[i]--,win[i]++;
answer();
printf("%d",res+ans1);
}

最新文章

  1. css选择器
  2. NFSv4的引用,迁移和备份(用户手册 v0.2)
  3. remote_addr和x_forwarded_for
  4. 转载 BCS 的好文章 1 - 怎么创建和使用BCS
  5. HashMap的原理与实 无锁队列的实现Java HashMap的死循环 red black tree
  6. 计算机视觉入门 Intorduction To Computer Vision
  7. ADT通过svn进行团队开发,svn插件不好使的解决方案
  8. SOCI、LiteSQL、POCO数据库访问类库对比
  9. 0x800a1391-Microsoft Jscript &quot;JSON未定义&quot;
  10. 20169210《Linux内核原理与分析》第九周作业
  11. [转]Android NDK几点回调方式
  12. C# 给枚举定义DescriptionAttribute,把枚举转换为键值对
  13. 简易漫画网站搭建-漫画喵Server版
  14. 201521123039 《java程序设计》第四周学习总结
  15. 随心测试_数据库_003 &lt;数据库存储结构&gt;
  16. php取余运算(%) 注意事项
  17. attempt to open datawindow failed@安装两个PB软件
  18. Python args kwargs 技巧
  19. 00-自测4. Have Fun with Numbers
  20. 搭建asp渗透测试环境

热门文章

  1. 1133 Splitting A Linked List
  2. PHP5.6 安装Yaf 2.3.5
  3. Linux下面的yum命令详解
  4. 整合多个py文件接口的unittest。suite执行方法
  5. shulti模块简述
  6. springboot成神之——basic auth和JWT验证结合
  7. leetcode486
  8. MySQL: [Err] 1093 - You can&#39;t specify target table &#39;bk&#39; for update in FROM clause
  9. Python名称空间和闭包
  10. codeforce 462DIV2 C题