代码:

#include<bits/stdc++.h>
using namespace std;
const int inf = 1e9;
const int mm = 111111;
const int maxn = 2999;
int node,src,dest,edge;
int ver[mm],flow[mm],cst[mm],nxt[mm];
int head[maxn],work[maxn],dis[maxn],q[maxn];
int tot_cost;
void prepare(int _node,int _src,int _dest)
{node=_node,src=_src,dest=_dest;for(int i=0; i<node; ++i)head[i]=-1;edge=0;tot_cost = 0;
}
void add_edge(int u,int v,int c,int cost)
{ver[edge]=v,flow[edge]=c,nxt[edge]=head[u],cst[edge]=cost,head[u]=edge++;ver[edge]=u,flow[edge]=0,nxt[edge]=head[v],cst[edge]=-cost,head[v]=edge++;
}
int ins[maxn];
int pre[maxn];
bool Dinic_spfa()
{memset(ins,0,sizeof(ins));memset(dis,-1,sizeof(dis));memset(pre,-1,sizeof(pre));queue<int> Q;//int i,u,v,l,r=0;Q.push(src);dis[src] = 0,ins[src] = 1;pre[src] = -1;while(!Q.empty()){int u = Q.front();Q.pop();ins[u] = 0;for(int e = head[u];e != -1;e = nxt[e]){int v = ver[e];if(!flow[e]) continue;if(dis[v] < 0 || dis[v] > dis[u] + cst[e]){dis[v] = dis[u] + cst[e];pre[v] = e;if(!ins[v]) ins[v] = 1,Q.push(v);}}       }return dis[dest] != -1;
}
int Dinic_flow()
{int i,ret=0,delta=inf;while(Dinic_spfa()){for(int i=pre[dest];i != -1;i = pre[ver[i^1]])delta = min(delta,flow[i]);for(int i=pre[dest];i != -1;i = pre[ver[i^1]])flow[i] -= delta,flow[i^1] += delta;ret+=delta;tot_cost += dis[dest]*delta;}return ret;
}
int abc[27];
int ag[111];
int val[111];
int n;
int main(){int sum = 0;scanf("%d",&n);prepare(1+26+n/2*26+n+1,0,1+26+n/2*26+n);for(int i = 1;i <= n;++i){char c;scanf(" %c",&c);abc[c-'a'+1]++;ag[i] = c-'a'+1;}for(int i = 1;i <= n;++i){scanf("%d",&val[i]);sum += val[i];}for(int i = 1;i <= 26;++i) add_edge(0,i,abc[i],0);for(int i = 1;i <= 26;++i){for(int j = 1;j <= n/2;j++){int _a = 26+(i-1)*n/2+j;add_edge(i,_a,1,0);int f1 = j,f2 = n-j+1;if(ag[f1] == i) add_edge(_a,f1+26+26*n/2,1,0);else add_edge(_a,f1+26+26*n/2,1,val[f1]);if(ag[f2] == i) add_edge(_a,f2+26+26*n/2,1,0);else add_edge(_a,f2+26+26*n/2,1,val[f2]);}}for(int i = 1;i <= n;++i) add_edge(26+26*n/2+i,1+26+n/2*26+n,1,0);int f = Dinic_flow();//cout<<f<<endl;cout<<sum - tot_cost<<endl;return 0;
}

codeforces 884F 费用流,图解很清晰相关推荐

  1. BZOJ 3836 Codeforces 280D k-Maximum Subsequence Sum (模拟费用流、线段树)

    题目链接 (BZOJ) https://www.lydsy.com/JudgeOnline/problem.php?id=3836 (Codeforces) http://codeforces.com ...

  2. Codeforces 884F Anti-Palindromize 费用流

    题意 定义"反回文串"为一个字符串 S[1..|S|] S [ 1.. | S | ] S[1..|S|],对于任意 1<=i<=|S| 1 <= i <= ...

  3. CodeForces 164C Machine Programming 费用流

    Machine Programming 题目连接: http://codeforces.com/problemset/problem/164/B Descriptionww.co One remark ...

  4. Codeforces 708D 上下界费用流

    给你一个网络流的图 图中可能会有流量不平衡和流量>容量的情况存在 每调整一单位的流量/容量 需要一个单位的花费 问最少需要多少花费使得原图调整为正确(可行)的网络流 设当前边信息为(u,v,f, ...

  5. Codeforces 362E Petya and Pipes 费用流建图

    题意: 给一个网络中某些边增加容量,增加的总和最大为K,使得最大流最大. 费用流:在某条边增加单位流量的费用. 那么就可以2个点之间建2条边,第一条给定边(u,v,x,0)这条边费用为0 同时另一条边 ...

  6. POJ 2516 基础费用流

    题意       有n个顾客,m个供应商,k种货物,给你顾客对于每种货物的要求个数,和供应商对于每种货物的现有量,以及供应每种货物的时候供应商和顾客之间的运输单价,问你满足所有顾客的前提下的最小运输费 ...

  7. [Neerc2016]Mole Tunnels (模拟费用流)

    题目链接:http://codeforces.com/gym/101190 SOLUTION: 模拟费用流 这题看完之后很容易想到费用流,但是n太大了不能直接跑. 我们考虑模拟这个费用流的增广过程,每 ...

  8. BZOJ1150[CTSC2007]数据备份Backup——模拟费用流+堆+链表

    题目描述 你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份.然而数据备份的工作是枯燥乏味 的,因此你想设计一个系统让不同的办公楼彼此之间互相备份,而你则坐在家中尽享计算机游 ...

  9. 【BZOJ】1834: [ZJOI2010]network 网络扩容(最大流+费用流)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1834 我又思考人生了T_T,nd的数组开小了,一直wa,调了一个小时才发现啊!!!!!我一直以为我的 ...

最新文章

  1. FreeBSD下查看各软件版本命令
  2. wxPython_Phoenix在线安装
  3. wireshark C插件开发
  4. express不是内部或外部命令,也不是可运行的程序
  5. 中断处理过程示意图_聊聊什么是中断机制?
  6. 自定义xy组 android,Android自定义view之仿支付宝芝麻信用仪表盘示例
  7. 求字符串里面数字之和
  8. php spider shell,ScrapyShell使用
  9. 运行vue init webpack vueTest时报错
  10. swift 异常捕获try catch的使用
  11. PDMS二次开发(八)——向PDMS12.1版本迁移
  12. 开学倒计时,实验室里的这些准备工作你做完了吗?-LIMS2
  13. theisle服务器信息设置,theisle服务器diy
  14. 通知 | 2021 中国高校计算机大赛 —— 微信大数据挑战赛
  15. JavaWeb中 pojo、entity、Dao、bo的含义
  16. 手动删除eureka多余服务
  17. 深入探索 Android 网络优化(二、网络优化基础篇)上
  18. iphone应用隐私政策_如何在iPhone上“隐藏”联系人以获得更大的隐私
  19. 安全管家2012上半年手机安全分析报告
  20. 微信公众号及CSDN文章爬取

热门文章

  1. 高等数学笔记:留数法
  2. viewpager+Fragment+Butterknife报错 :Fragment already added: MsgOuChatFragment
  3. 仙剑奇侠传亿仙java_《仙剑奇侠传-忆仙》图文攻略之三
  4. 工作中提升效率的工具
  5. 正睿OIday3总结
  6. CLH Lock 原理
  7. 白嫖党最爱!撸了郭霖大神写的Framework源码笔记,最强技术实现
  8. 2015三十本好书推荐及理由
  9. 第二十四篇:SuperSpeed/HighSpeed USB的ISO传输
  10. 机器学习基石 5.1 Recap and Preview