一、题目

题目描述
有nnn个人,mmm个关系,每个关系中包含u,v,a,b,cu,v,a,b,cu,v,a,b,c,表示u,vu,vu,v两个人,如果都选000有aaa的贡献,如果都选111有ccc的贡献,否则有bbb的贡献,求最大的贡献。
数据范围
n≤500,m≤104,1≤u,v≤n,u≠v,1≤a,c≤4×106,b=a/4+c/3n≤500,m≤10^4,1≤u,v≤n,u≠v,1≤a,c≤4×10^6,b=a/4+c/3n≤500,m≤104,1≤u,v≤n,u​=v,1≤a,c≤4×106,b=a/4+c/3
本题有多组输入数据

二、解法

这道题很暴力,考虑总量-最小割,直接建一个图,然后解方程算出每条边的贡献,图长这样:

{a+b=A+Bc+d=B+Ca+e+d=b+e+c=A+C\begin{cases} a+b=A+B\\ c+d=B+C\\ a+e+d=b+e+c=A+C \end{cases}⎩⎪⎨⎪⎧​a+b=A+Bc+d=B+Ca+e+d=b+e+c=A+C​

上面的方程肯定是解不出来的,但是我们求出一个特殊解就行了:

{a=b=(A+B)/2c=d=(B+C)/2e=(A+C)/2−B\begin{cases} a=b=(A+B)/2\\ c=d=(B+C)/2\\ e=(A+C)/2-B \end{cases}⎩⎪⎨⎪⎧​a=b=(A+B)/2c=d=(B+C)/2e=(A+C)/2−B​

然后把图建出来之后跑最小割,用sum−flowsum-flowsum−flow就是答案,可能会有边权不是整数,所以我们把所有边权×2\times 2×2,然后算答案是把flow/2flow/2flow/2即可,本题要看long long\text{long long}long long。

#include <cstdio>
#include <iostream>
#include <cstring>
#include <queue>
#define int long long
#define inf (1ll<<60)
const int MAXN = 1005;
using namespace std;
int read()
{int num=0,flag=1;char c;while((c=getchar())<'0'||c>'9')if(c=='-')flag=-1;while(c>='0'&&c<='9')num=(num<<3)+(num<<1)+(c^48),c=getchar();return num*flag;
}
int n,m,S,T,tot,sum,ans,f[MAXN],cur[MAXN],dis[MAXN];
queue<int> q;
struct edge
{int v,c,next;
}e[MAXN*MAXN];
void add_edge(int u,int v,int c)
{e[++tot]=edge{v,c,f[u]},f[u]=tot;e[++tot]=edge{u,0,f[v]},f[v]=tot;
}
int bfs()
{memset(dis,0,sizeof dis);dis[S]=1;q.push(S);while(!q.empty()){int u=q.front();q.pop();for(int i=f[u];i;i=e[i].next){int v=e[i].v;if(e[i].c>0 && !dis[v]){dis[v]=dis[u]+1;q.push(v);}}}if(!dis[T]) return 0;return 1;
}
int dfs(int u,int ept)
{if(u==T) return ept;int flow=0,tmp=0;for(int &i=cur[u];i;i=e[i].next){int v=e[i].v;if(dis[u]+1==dis[v] && e[i].c>0){tmp=dfs(v,min(e[i].c,ept));if(!tmp) continue;ept-=tmp;e[i].c-=tmp;e[i^1].c+=tmp;flow+=tmp;if(!ept) break;}}return flow;
}
signed main()
{while(~scanf("%lld %lld",&n,&m)){S=0;T=n+1;tot=1;sum=ans=0;for(int i=0;i<=T;i++)f[i]=0;for(int i=1;i<=m;i++){int u=read(),v=read(),a=read(),b=read(),c=read();sum+=a+b+c; add_edge(S,u,(a+b));add_edge(S,v,(a+b));add_edge(u,v,(a+c)-b*2);add_edge(v,u,(a+c)-b*2);add_edge(u,T,(b+c));add_edge(v,T,(b+c));}while(bfs()){for(int i=0;i<=T;i++)cur[i]=f[i];ans+=dfs(S,inf);}printf("%lld\n",sum-ans/2);}
}

HDU6598 Harmonious Army相关推荐

  1. [HDU6598] Harmonious Army(网络流方程建图)

    文章目录 题目 题意 分析 代码 题目 Harmonious Army 题意 你有n(n≤500)n(n\leq 500)n(n≤500)个士兵,每个士兵需要安排一个职位(法师或战士),另给定mmm对 ...

  2. Harmonious Army

    Harmonious Army 时间限制: 1 Sec  内存限制: 128 MB 题目描述 Now, Bob is playing an interesting game in which he i ...

  3. 2019 Multi-University Training Contest 2 - 1008 - Harmonious Army - 最大流

    http://acm.hdu.edu.cn/showproblem.php?pid=6598 一开始就觉得是网络流,但是一直都不会怎么建图. 这里要考虑. 每一组边(u,v,a,b,c)建立如下的连接 ...

  4. HDU - 6598 Harmonious Army (最小割)

    题目链接 题意 每个人可以选择两种角色(A,B)(A, B)(A,B),给定MMM个关系(x,y)(x, y)(x,y),如果x,yx, yx,y同时选择AAA总的攻击力加aaa,如果x,yx, yx ...

  5. HDU - 6598 Harmonious Army(最大流最小割)

    题目链接:点击查看 题目大意:现在有 n 个士兵,每个士兵有两种职业可以选择,一种是战士,一种是法师,现在有 m 对关系,每对关系 ( x , y ) 的权值如下: 如果 x 和 y 同为战士,则收益 ...

  6. 20190724杭电多校第二场

    没有补题..倒是又想到了1002的二分做法,比原来好写了不少,也快了不少. #include<bits/stdc++.h> using namespace std; #define p_b ...

  7. 2019HDU多校补题

    心得:做不出,补不动 HUD第一场: 1001 Blank Y 1002 Operation Y 1003 Milk 1004 Vication Y 1005 Path Y 1006 Typewrit ...

  8. POJ 3069 Saruman's Army(贪心)

    题目链接:http://poj.org/problem?id=3069 Description Saruman the White must lead his army along a straigh ...

  9. Harmonious Graph CodeForces - 1253D(思维+并查集)

    You're given an undirected graph with n nodes and m edges. Nodes are numbered from 1 to n. The graph ...

最新文章

  1. android 移除自己view,Android自定义View-带删除和搜索图标的EditText
  2. PAT1096 Consecutive Factors (20)(逻辑)
  3. 人生没有对与错,只是选择不同
  4. php类的的属性值,PHP面向对象之旅:类的属性
  5. 图说Oracle基础知识
  6. Spring高级之注解@PropertySource详解(超详细)
  7. 【数据结构笔记03】算法实例:最大子列和
  8. oracle网络加载错误怎么解决,Oracle加载数据库错误解决的方法详细教程
  9. 浅谈 js 字符串之神奇的转义
  10. 51单片c语言编程实例,51单片机C语言编程实例
  11. 云计算平台构建与实验设计
  12. ansoft maxwell破解版下载v16 中文版 32bit 64bit 百度云盘分享下载链接目录点击下方链接下载即可获得
  13. 阿尼亚二次元动漫鼠标指针最新教程+素材打包
  14. 手机录音ogg格式怎么转换mp3
  15. Matlab2017b安装教程及破解失败方法
  16. 简述er图的作用_ER图的理解
  17. Dragonfly单机部署比redis快25倍的缓存中间件
  18. 土木/岩土期刊版面费/审稿费统计列表
  19. c语言程序设计迷宫问题,C语言迷宫问题
  20. WSL2跟踪 - 18945: 通过localhost直接访问 WSL2 容器中的服务

热门文章

  1. centos 配置证书_如何在CentOS 8上设置和配置证书颁发机构(CA)
  2. 高德地图宣布品牌升级,打造出门好生活开放服务平台
  3. YoMail 隐藏小功能之怎样在yomail里使用石墨文档?
  4. 运维工程师必会的109个Linux命令
  5. leelen可视对讲怎么接线_楼道对讲门铃怎么接线
  6. Grad-CAM简介
  7. 更新Android版GPS定位源代码
  8. 一个小灯泡带我了解放大电路
  9. 写题记录 cf G. Minimal Coverage 难度2200
  10. kaggle:NBA球员投篮数据分析与可视化