这道题和 BZOJ 2400 是一道题,不多讲了 CODE #include <cstdio> #include <cstring> #include <vector> #include <queue> #include <algorithm> using namespace std; typedef long long LL; template<typename T>inline void read(T &num) { ch…
题面 一个无向图,一些点有固定权值,另外的点权值由你来定. 边的值为两点的异或值,一个无向图的值定义为所有边的值之和. 求无向图的最小值 分析 每一位都互不干扰,按位处理. 用最小割算最小值 保留原图的边,容量为1 如果当前点这一位是1,就从S连向当前点,容量为∞\infty∞ 如果当前点这一位是0,就从当前点连向T,容量为∞\infty∞ 那么这样一来,分在S一边就表示选,分在T一边就表示不选.如果相邻的两点在不同的集合,中间的边就必须断掉,造成1的代价,那么刚好相当于中间的边的值. 跑一遍最…
OPTM - Optimal Marks You are given an undirected graph G(V, E). Each vertex has a mark which is an integer from the range [0..231 – 1]. Different vertexes may have the same mark. For an edge (u, v), we define Cost(u, v) = mark[u] xor mark[v]. Now we…
OPTM - Optimal Marks no tags  You are given an undirected graph G(V, E). Each vertex has a mark which is an integer from the range [0..231 – 1]. Different vertexes may have the same mark. For an edge (u, v), we define Cost(u, v) = mark[u] xor mark[v]…
http://www.spoj.com/problems/OPTM/ 题意: 给出一张图,点有点权,边有边权 定义一条边的权值为其连接两点的异或和 定义一张图的权值为所有边的权值之和 已知部分点的点权,自定义其余点的点权 使图的权值最小,并在此基础上使点权和最小 输出点的权值 异或——按位做 那么题目就变成了已知一些点的点权为0/1,自定义剩余点的点权0/1 使01相遇的边最少 (01相遇指的是一条边连接的两点的点权不同) 我们建立最小割模型: 先不考虑第二问 源点向已知点的点权为0的点连正无穷…
[题意]给出一个无向图,每个点有一个标号mark[i],不同点可能有相同的标号.对于一条边(u, v),它的权值定义为mark[u] xor mark[v].现在一些点的标号已定,请决定剩下点的标号,使得总的边权和最小.(0 < N <= 500, 0 <= M <= 3000, 0 <= mark[i] <= 2^31-1) 胡伯涛神牛<最小割模型在信息学竞赛中的应用>中的例题.非常好的一道题!非常推荐! [思路] 我们把问题数学化就是:  Minimum…
因为是异或运算,所以考虑对每一位操作.对于所有已知mark的点,mark的当前位为1则连接(s,i,inf),否则连(i,t,inf),然后其他的边按照原图连(u,v,1),(v,u,1),跑最大流求最小割.然后从s沿着有剩余流量的边dfs,把dfs到的点都与(|)上1,因为是与,所以即使操作到了已知mark的点也没关系. 考虑这样做的意义.最小割就是把总点集分割为两个点集S,T,使得所有\(u\in S,v\in T,val(u,v) \)的值最小.也就是说,在这道题中的意义就是在当前位使最少…
Spoj 839 Optimal Marks Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 908  Solved: 347[Submit][Status][Discuss] Description 定义无向图中的一条边的值为:这条边连接的两个点的值的异或值. 定义一个无向图的值为:这个无向图所有边的值的和. 给你一个有n个结点m条边的无向图.其中的一些点的值是给定的,而其余的点的值由你决定(但要求均为非负数),使得这个无向图的值最小.在无向图的…
传送门 闵神讲网络流应用的例题,来水一水 要写出这道题,需要深入理解两个概念,异或和最小割. 异或具有相对独立性,所以我们把每一位拆开来看,即做大概$32$次最小割.然后累加即可. 然后是最小割把一张图分割成两个集合,简单看就是0集合和1集合. 简单的建图: 原图不变,改成双向边,所有的流量限制为1.然后所有S点向点权为1的连边,点权为0的向T连边,容量都是正无穷. 为什么这样建?首先看,最小割把一张图分成两个点集.而因为我们的流量限制可以让最小割只割真实存在的边,而割的也只有可能是跨越0集合和…
题目链接 也算水题一道吧,不过Round1感性理解一下就xjb建了个图,40 Round2仔细分析了一会,理性建了个图,90 然后分析了半天……改大数组就A了…… 从S到所有值为1的点连一条inf的边,从所有值为0的点向T连一条inf的边 然后对于每个值为1的点分析: 把点拆成A部和B部 改立场后自我谴责,从A部向B部连一条 改立场后本来同立场的朋友谴责,从$x_{A}$向$y_{B}$连一条 然后本来立场就不一样的朋友相信大家都会搞 然后最小割转最大流,dinic跑一下就A了 其实这题貌似不能…
题目链接 像题面那样把棋盘染成红黄点.发现骑士迈一步能到达的点的颜色一定是跟他所在的格子的颜色不同的.于是(woc哪来的于是?这个性质有这么明显吗?)从源点向所有红点连边,从所有黄点向汇点连边,红点向从它一步能迈到的黄点连边,然后求出最小割(其实就是最大流啦)用可以站骑士的总点数减去. 网络流构图好喵啊     一脸懵逼 #include<cstdio> #include<cctype> #include<algorithm> #include<cstring&g…
题面太长了请各位自行品尝—>老C的方块 分析: 我们要解决掉所有使人弃疗的组合,还要保证花费最小,容易想到最小割(当然你要是想费用流的话,我们就没办法定义流量了) 我们来分析一下那些令人弃疗的组合,他们的规律: 首先是两个和特殊边直接相邻的方块(以下简称轴方块),加上两侧各任意一个边缘方块,组成了令人弃疗的组合. 所以我们有三种选择(准确地说其实只有两种,前两种本质一样): 1. 将和特殊边左侧的轴方块相连的所有边缘方块都破坏掉. 2. 将和特殊边右侧的轴方块相连的所有边缘方块都破坏掉. 3.…
重要链接 基础部分链接 : 二分图 & 网络流初步 zzz大佬博客链接 : 网络流学习笔记 重点内容:最小割二元关系新解(lyd's ppt) 题目:网络流相关题目 lyd神犇课件链接 : 网络流模型设计lyd(提取码:m5sd) 国家集训队2007胡伯涛论文 : 算法合集之<最小割模型在信息学竞赛中的应用> 最详细(也可能现在不是了)网络流建模基础 对于网络流的基础部分以及其在二分图方面的应用,详见上面的第一个链接. 先 Copy 下重点: 最小割 最大流等于最小割. 如何找到最小割…
题目:https://www.luogu.org/problemnew/show/P1344 就是求最小割: 但是还要边数最小,所以把边权都*1001+1,这样原来流量部分是*1001,最大流一样的不影响,而+1会使其尽量减少边数: bfs 里忘了给 dis[] 赋0了调了好半天...尴尬... 代码如下: #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #i…
题意:给一张无向图,每个点有其点权,边(i,j)的cost是\(val_i\ XOR \ val_j\).现在只给出K个点的权值,求如何安排其余的点,使总花费最小. 分析:题目保证权值不超过32位整型,按每一位k上的值(0 or 1),将点分为两个集合X和Y,X中为1的点,Y为0的点.如果X中的点到Y中的边有边,表示这一点对对结果将产生贡献.用最小的费用将对象划分成两个集合,问题转化为求最小割的问题. 建图:建源点s和汇点t.从s向X中的点建容量为正无穷的边;从Y中的点向t建容量为正无穷的边,对…
SP839 Optimal marks(最小割) 给你一个无向图G(V,E). 每个顶点都有一个int范围内的整数的标记. 不同的顶点可能有相同的标记.对于边(u,v),我们定义Cost(u,v)= mark [u] \(\oplus\) mark [v].现在我们知道某些节点的标记了.你需要确定其他节点的标记,以使边的总成本尽可能小.(0 < N <= 500, 0 <= M <= 3000) 先来看一下异或的性质,由于每一位是独立的,我们可以把每一位拉出来分开考虑,变成32个子…
传送门 论文<最小割模型在信息学竞赛中的应用>原题 二进制不同位上互不影响,那么就按位跑网络流 每一位上,确定的点值为1的与S连一条容量为INF的有向边.为0的与T连一条容量为INF的有向边. 其他的按给定的无向图建边,容量为1. 统计答案是从源点能到达的点(流量未达到容量)即为该位上为1的点. 需要跑多少遍根据所有权值的最高位来确定.直接跑30次TLE了. #include <bits/stdc++.h> using namespace std; inline int read(…
[BZOJ2400]Spoj 839 Optimal Marks Description 定义无向图中的一条边的值为:这条边连接的两个点的值的异或值. 定义一个无向图的值为:这个无向图所有边的值的和. 给你一个有n个结点m条边的无向图.其中的一些点的值是给定的,而其余的点的值由你决定(但要求均为非负数),使得这个无向图的值最小.在无向图的值最小的前提下,使得无向图中所有点的值的和最小. Input 第一行,两个数n,m,表示图的点数和边数. 接下来n行,每行一个数,按编号给出每个点的值(若为负数…
luogu 题意 给你一个无向图\(G(V,E)\). 每个顶点都有一个int范围内的整数的标记. 不同的顶点可能有相同的标记. 对于边\((u,v)\),我们定义\(Cost(u,v)=\rm mark_u\ xor \ mark_v\). 现在我们知道某些节点的标记了.你需要确定其他节点的标记,以使边的总成本尽可能小. sol 既然是异或的话那就按位考虑吧. 每个已经确定的点和\(S\)或者是\(T\)连\(inf\)边.两个相邻的点之间连双向为\(1\)的边. 直接就是最小割了吧. 跑完最…
题目大概说给一张图,每个点都有权,边的权等于其两端点权的异或和,现已知几个点的权,为了使所有边的边权和最小,其他点的权值该是多少. 很有意思的一道题,完全看不出和网络流有什么关系. 考虑每个未知的点$x$的权的二进制的第$i$位$x_i$,其对边权和的贡献为$\sum_{(x,y)\in E}(2^i\cdot(x_i\ \hat{}\ y_i))=2^i\sum_{(x,y)\in E}(x_i\ \hat{}\ y_i)$,而$x_i$取值是$0$或$1$! 这样问题就明了了: 相当于对于每…
[题目链接] http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=17875 [题意] 给定一个图,图的权定义为边的两端点相抑或值的和.问如何给没有权值的点分配权值使得图的权值最小. [思路] 考虑每一二进制位i,即我们要依次确定每一二进制位且构造该二进制位的最优方案,建图如下: (S,u,inf)            u的i位为0 (u,T,inf)            u的i位为1 (u,v,1)(v,u,1)    …
https://vjudge.net/problem/SPOJ-OPTM 题意: 给出一个无向图G,每个点 v 以一个有界非负整数 lv 作为标号,每条边e=(u,v)的权w定义为该边的两个端点的标号的异或值,即W=lu XOR lv.现已知其中部分点的标号,求使得该图的总边权和最小的标号赋值.即最小化: 思路: 这道题目在刘伯涛的论文里讲得十分的详细,看看论文就可以啦. XOR运算是根据二进制的每一位来计算的,,并且因为每一位都是相互独立的,互不影响,所以可以转化为下式: 接下来对于每一位都新…
题目描述 定义无向图中的一条边的值为:这条边连接的两个点的值的异或值. 定义一个无向图的值为:这个无向图所有边的值的和. 给你一个有n个结点m条边的无向图.其中的一些点的值是给定的,而其余的点的值由你决定(但要求均为非负数),使得这个无向图的值最小.在无向图的值最小的前提下,使得无向图中所有点的值的和最小. 输入 第一行,两个数n,m,表示图的点数和边数. 接下来n行,每行一个数,按编号给出每个点的值(若为负数则表示这个点的值由你决定,值的绝对值大小不超过10^9). 接下来m行,每行二个数a,…
传送门 一个无向图,每个点有点权,某些点点权确定了,某些点由你来确定,边权为两个点的异或和,要使边权和最小. 这不是一道按位做最小割的大水题么 非常开心地打了,还非常开心地以为有spj,然后非常开心地Wa了 才发现在边权和最小的条件下还要让点权和最小. 这可咋整啊,难不成要费用流. 然后悄悄搜了下题解发现了巧妙的解决方法,把原来建的图中的边权都扩大10000倍,然后在选1的地方边权再悄悄加上1 把它看成10000和1两条边的话,相当于优先考虑大边最小,大边最小的前提下小边最小,即答案. //Ac…
题目大意: 给你一个无向图\(G(V,E)\). 每个顶点都有一个int范围内的整数的标记. 不同的顶点可能有相同的标记. 对于边\((u,v)\),我们定义\(Cost(u,v)=mark [u]\ \ xor\ \ mark [v]\). 现在我们知道某些节点的标记了.你需要确定其他节点的标记,以使边的总成本尽可能小. 最后要求输出的每个点的标号 QwQ一看到这种跟位运算有关题目,就会想到按位来处理 仔细考虑,发现这个题满足最小割的模型,对于每一位,当时将所有点的对应位分成0,或者是1 那么…
2400: Spoj 839 Optimal Marks Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 567  Solved: 202[Submit][Status][Discuss] Description 定义无向图中的一条边的值为:这条边连接的两个点的值的异或值. 定义一个无向图的值为:这个无向图所有边的值的和. 给你一个有n个结点m条边的无向图.其中的一些点的值是给定的,而其余的点的值由你决定(但要求均为非负数),使得这个无向图的值最小…
[SPOJ839]Optimal Marks 试题描述 You are given an undirected graph \(G(V, E)\). Each vertex has a mark which is an integer from the range \([0..2^{31} - 1]\). Different vertexes may have the same mark. For an edge \((u, v)\), we define \(Cost(u, v) = mark…
Optimal Marks(optimal) 题目描述 定义无向图边的值为这条边连接的两个点的点权异或值. 定义无向图的值为无向图中所有边的值的和. 给定nn个点mm条边构成的图.其中有些点的权值是给定的,另外一些由你来定.点权必须为非负数.现在你需要使无向图的值最小,且在保证图的权值最小的情况下点的权值的和最小. 输入 第一行两个数nn和mm,表示图的点数和边数. 接下来nn行,每行一个数,表示每个点的权值.如果是负数,表示该点点权由你定,点权绝对值不超过109109. 接下来mm行,每行两个…
You are given an undirected graph G(V, E). Each vertex has a mark which is an integer from the range [0..231 – 1]. Different vertexes may have the same mark. For an edge (u, v), we define Cost(u, v) = mark[u] xor mark[v]. Now we know the marks of som…
You are given an undirected graph G(V, E). Each vertex has a mark which is an integer from the range [0..231 – 1]. Different vertexes may have the same mark. For an edge (u, v), we define Cost(u, v) = mark[u] xor mark[v]. Now we know the marks of som…