SPOJ Optimal Marks(最小割的应用)
2015-08-31 11:07
246 查看
SPOJ Optimal Marks(最小割的应用)
真心好题,网络流简直无处不在,能够解决一些看似困难的问题,希望能从中学到其精髓—-模型建立+建图
题意:
给定一个无向图,每个顶点都有对应值,每条边的权值为val[u] ^ val[u],同时已知其中某些点的值,求其他点的权值使得最终的图的边权和最小?分析:
首先边与边之间异或操作,不太好直接处理,因为异或操作每一位运算相互独立,我们来逐位考虑,那么对于那些还未知的权值的点,这一位要么为0 ,要么为1,同时我们还得注意边的两个端点值相同则没有权值,即为0,而相异的话则权值为1,而我们的目标就是最小化边权和,这样一来,我们就可以想到问题等效为: 把点集分为两个部分点集分别为0-1,最少需要删除多少条边,而这些需要删除的边正是我们不得不把其两端点的值相异的边,而其他边权值则为0,因为只有这样,才能使得删除的边最小,也即边权和最小,相信这样的讲解比较容易懂吧!如果对于这个模型转化的思维过程还没有想明白的话,建议画个图借助一个例子理解下!
剩下的就是建边了,当前考虑第i位,对于一些已知点,由源点 S 与对应位为0的点连边,权值INF,由对应位为1的点与汇点连边,权值为INF,最后跑最大流 Maxflow 就行了,权值 ans+=∑i=0312i⋅Maxflowi
相关文章推荐
- 初学图论-Kahn拓扑排序算法(Kahn's Topological Sort Algorithm)
- 初学图论-Bellman-Ford单源最短路径算法
- 初学图论-DAG单源最短路径算法
- 初学图论-Dijkstra单源最短路径算法
- 初学图论-Dijkstra单源最短路径算法基于优先级队列(Priority Queue)的实现
- 封装好的Folyd建图,C++源码
- LCA模板
- 图论学习笔记之一——Floyd算法
- 【网络流-最大流-Dinic-建模】POJ3281 Dining:Pascal 解法
- Ford_Fulkerson算法
- 重标记与前移算法
- 【LCA】SPOJ QTREE2
- poj 3249 Test for Job 最长路
- HDU 2544
- 网络流之增广路算法
- Timus 1557 Network Attack DFS+各种各种...
- HDU1289 Tarjan-模板题
- Poj2638 网络流+最短路+二分答案
- Aizu1311 分层图最短路 (...大概)
- Dijkstra算法