时间限制:20000ms

单点时限:1000ms

内存限制:256MB

描述

在 A 国有一个秘密特工组织,这个特工组织是由若干对双人组合构成的

现在特工组织有一批新人加入,为了防止背叛,组织规定来自相同城市的人不能配对在一起

现在已知 A 国有 n 个城市,且新人中来自第 i 个城市的有 ai 人,求最多组成几个配对

输入

第一行一个正整数 n

第二行 n 个数,第 i 个数是 ai

1 ≤ n ≤ 103

0 ≤ ai ≤ 109

输出

输出最多组成几个配对

样例输入

3
1 2 3

样例输出

3

思路:

本来这道题不用网络流,就可以的。不过感觉可以做,就试试模板。

直接S连所有城市 i,流量为人数,T 连所有城市拆的点n+i 流量为人数。

i  与  除了它自己的城市连边,流量为min(两个城市人数)。

因为又重复的值,跑一遍最大流/2,就是答案。

代码:

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std ;#define RPEF( i , a , b ) for ( int i = a ; i <= b ; ++ i )
#define REP( i , n ) for ( int i = 0 ; i < n ; ++ i )#define copy( a , x ) memcpy ( a , x , sizeof a )typedef long long LL ;const int MAXN = 150000 ;
const int MAXE = 10000000 ;
const int MAXQ = 10000000 ;
const LL INF = 1e15 ;struct Edge {int v , n ;LL c ;Edge ( int var = 0 , LL cap = 0 , int next = 0 ) :v ( var ) , c ( cap ) , n ( next ) {}
} ;struct netWork {Edge edge[MAXE] ;int adj[MAXN] , cntE ;int cur[MAXN] , d[MAXN] , num[MAXN] , pre[MAXN] ;bool vis[MAXN] ;int Q[MAXQ] , head , tail ;int s , t , nv ;LL flow ;void init () {cntE = 0 ;memset(adj,-1,sizeof(adj));}void addedge ( int u , int v , LL c , LL rc = 0 ) {edge[cntE] = Edge ( v ,  c , adj[u] ) ;adj[u] = cntE ++ ;edge[cntE] = Edge ( u , rc , adj[v] ) ;adj[v] = cntE ++ ;}void rev_Bfs () {memset(vis,0,sizeof(vis));memset(num,0,sizeof(num));d[t] = 0 ;vis[t] = 1 ;head = tail = 0 ;Q[tail ++] = t ;num[0] = 1 ;while ( head != tail ) {int u = Q[head ++] ;for ( int i = adj[u] ; ~i ; i = edge[i].n ) {int v = edge[i].v ;if ( vis[v] )continue ;vis[v] = 1 ;d[v] = d[u] + 1 ;++ num[d[v]] ;Q[tail ++] = v ;}}}LL ISAP () {copy ( cur , adj ) ;rev_Bfs () ;flow = 0 ;int i , u = pre[s] = s ;while ( d[s] < nv ) {if ( u == t ) {LL f = INF ;int pos ;for ( i = s ; i != t ; i = edge[cur[i]].v )if ( f > edge[cur[i]].c )f = edge[cur[i]].c , pos = i ;for ( i = s ; i != t ; i = edge[cur[i]].v )edge[cur[i]].c -= f , edge[cur[i] ^ 1].c += f ;u = pos ;flow += f ;}for ( i = cur[u] ; ~i ; i = edge[i].n )if ( edge[i].c && d[u] == d[edge[i].v] + 1 )break ;if ( ~i ) {cur[u] = i ;pre[edge[i].v] = u ;u = edge[i].v ;}else {if ( 0 == ( -- num[d[u]] ) )break ;int mmin = nv ;for ( i = adj[u] ; ~i ; i = edge[i].n )if ( edge[i].c && mmin > d[edge[i].v] )cur[u] = i , mmin = d[edge[i].v] ;d[u] = mmin + 1 ;++ num[d[u]] ;u = pre[u] ;}}return flow ;}
} ;netWork net ;int n,m;
int a[2100];void work () {net.init () ;net.s = 0 , net.t = 2*n+1, net.nv = net.t + 1 ;for(int i=1;i<=n;i++){net.addedge(net.s,i,a[i]);net.addedge(n+i,net.t,a[i]);for(int j=1;j<=n;j++){if(i==j)continue;net.addedge(i,n+j,min(a[i],a[j]));}}LL flow = net.ISAP () ;printf ( "%lld\n" ,flow/2) ;
}int main () {memset(a,0,sizeof(a));scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d",&a[i]);}work () ;return 0 ;
}

#1790 : 特工配对相关推荐

  1. 每日一题之 hiho1790 : 特工配对

    描述 在 A 国有一个秘密特工组织,这个特工组织是由若干对双人组合构成的 现在特工组织有一批新人加入,为了防止背叛,组织规定来自相同城市的人不能配对在一起 现在已知 A 国有 n 个城市,且新人中来自 ...

  2. 跳槽应该果断吗_采取果断行动打击网络犯罪的重要性

    跳槽应该果断吗 The FBI has indicted Mason Sheppard, Nima Fazeli and Graham Ivan Clark, the three people acc ...

  3. Steam中国正式定名“蒸汽平台”

    Steam中国正式定名"蒸汽平台" 8月21日,Steam中国终于正式定名,新名叫做:"蒸汽平台".Steam中国(蒸汽平台)几乎完全独立于Steam,游戏库也 ...

  4. 初中文化能学编程吗_儿童早教益智,乐森星际特工智能编程机器人体验

    作为新时代的家长,总是想把最好的给孩子,为了不让孩子输在起跑线,各种兴趣培训.课程报了一通,但效果不一定很好,也无形中给孩子造成了压力,这种现象在一二线大城市尤为明显.作为亲身经历这个过程的家长,我认 ...

  5. 配对交易方法_COVID下的自适应配对交易,一种强化学习方法

    配对交易方法 Abstract 抽象 This is one of the articles of A.I. Capital Management's Research Article Series, ...

  6. LeetCode简单题之比赛中的配对次数

    题目 给你一个整数 n ,表示比赛中的队伍数.比赛遵循一种独特的赛制: 如果当前队伍数是 偶数 ,那么每支队伍都会与另一支队伍配对.总共进行 n / 2 场比赛,且产生 n / 2 支队伍进入下一轮. ...

  7. 网络流24题-飞行员配对方案问题

    飞行员配对方案问题 时空限制1000ms / 128MB 题目背景 第二次世界大战时期.. 题目描述 英国皇家空军从沦陷国征募了大量外籍飞行员.由皇家空军派出的每一架飞机都需要配备在航行技能和语言上能 ...

  8. 4514: [Sdoi2016]数字配对

    Description 有 n 种数字,第 i 种数字是 ai.有 bi 个,权值是 ci. 若两个数字 ai.aj 满足,ai 是 aj 的倍数,且 ai/aj 是一个质数, 那么这两个数字可以配对 ...

  9. 【网络流24题】解题报告:A、飞行员配对方案问题(最大流求二分图最大匹配)

    A.飞行员配对方案问题 (二分图最大匹配)(最大流)[提高+/省选- ] 题目链接 [问题分析] 二分图最大匹配问题. [建模方法] 在二分图的基础上增加源S和汇T. 1.S向X集合中每个顶点连一条容 ...

最新文章

  1. 60幅精美绝伦的绘景(Matte Paintings)作品欣赏(上篇)
  2. GDCM:重写ELSCINT1 / PMSCT_RGB1压缩图像的测试程序
  3. mysql mariadb nodejs_Nodejs中使用mariadb库连接MySQL数据库
  4. 如何解决Android studio已分享到github的项目但是git->commit directory提交不上去
  5. Docker Desktop 向大公司宣告收费,网友大呼:是时候弃用了!
  6. 集群(cluster)amp;高可用性(HA)概念
  7. windows--bat--右键菜单
  8. 如何查找MySQL中查询慢的SQL语句
  9. java事件处理机制(自定义事件)
  10. 二、Swift网络请求回来的数据我这样取
  11. 蚂蚁笔记 linux安装教程,简年14:蚂蚁笔记(Leanote)快速部署指南
  12. IIS 配置详解 请求长度限制调整
  13. 玩盲盒的泡泡玛特,美妆零售盒里究竟藏有什么“秘密”?
  14. windows切换桌面的快捷键
  15. PR音频处理——音乐逐渐萎靡的效果
  16. quest2 APK破解游戏包安装器 如何安装方法
  17. HTB-Apocalyst
  18. 钉钉用不同的手机签到后台怎么显示的代签到有用吗
  19. 在stm32cubemx的freertos中创总任务跑支线任务
  20. Unity 自定义Image形状

热门文章

  1. 使用Godaddy和Linode建站的菜鸟初体验
  2. 外包企业名录 - List of Outsourcing Enterprises
  3. firefox v46如何添加xpath checker组件
  4. 华为手机记事本导出_手机自带记事本如何备份
  5. js 原型相关知识点总结
  6. 超实用的股权激励方案
  7. C++ openCV 图像的读取、显示、保存、加权融合、改变对比度、修改色域
  8. R-第七章|因子分析
  9. 为什么你总是无法做出正确的判断
  10. cartopy 绘制中国地图,南海诸岛和十段线