bzoj1562】的更多相关文章

http://www.lydsy.com/JudgeOnline/problem.php?id=1562 (题目链接) 题意 给出一个序列(0~n-1),这个序列经过某个变换会成为另外一个序列,但是其中的元素不会改变,给出初始序列与变换后的序列每一位上的“距离”,求字典序最小的变换序列. Solution 每个位置上只有2种情况,很明显的二分图匹配.因为要求字典序最小,我们考虑匈牙利算法的运行方式,是保证当前匹配的点最优,所以连边时将字典序小的点尽可能后连,保证第一个邻接表第一个选出来的点是字典…
[BZOJ1562][NOI2009]变换序列 题面 BZOJ 洛谷 这题面写的是真的丑,还是先手动翻译成人话. 让你构造一个\(0..N-1\)的排列\(T\) 使得\(Dis(i,T_i)\)为给定的值,如果有多个满足条件则输出字典序最小的那个. 其中,\(Dis(x,y)=min(|x-y|,N-|x-y|)\) 题解 这不一眼二分图匹配吗? 蛤?没了啊. #include<iostream> #include<cstdio> #include<cstdlib>…
Description Input 第一行包含两个整数N,M,X.N,M分别表示图G的点数与边数,X的意义如上文所述.接下来M行,每行两个正整数a, b,表示一条有向边(a, b).图中的每个点将编号为1,2,3…N,保证输入中同一个(a,b)不会出现两次. Output 应包含两行,第一行包含一个整数K.第二行包含整数C Mod X. Sample Input 6 6 20070603 1 2 2 1 1 3 2 4 5 6 6 4 Sample Output 3 3 HINT 对于100%的…
Description Input Output Sample Input 5 1 1 2 2 1 Sample Output 1 2 4 0 3 HINT 30%的数据中N≤50:60%的数据中N≤500:100%的数据中N≤10000. 题解: 二分图匹配模型很显然,但是不要看到二分图就去网络流了...注意到题目要求的是字典序最小的!如果你用Dinic算法去多路增广,根本无法保证字典序,除非用EK.据说也有边增广边调整的搞法,但是这么多花式搞法,前提都是你不知道匈牙利算法!匈牙利算法是一种非…
1.题意:题意有些难理解 2.分析:我们发现如果要求判断是否合法的话就so easy了,二分图匹配即可,但是我们发现要求输出字典序最小的,那么我们在匈牙利的时候就倒着枚举,另外邻接表中的边一定要排好序,如果用的是链表的话,就从大到小,vector就从小到大插入,然后我们就可以保证字典序最小了,想了半天网络流QAQ,看了题解..匈牙利是啥都快忘记了... #include <cstdio> #include <cstdlib> #include <cstring> #in…
很明显是二分图匹配,关键是怎么求字典序最小 想到两种做法,首先是直接匹配,然后从第一位贪心调整 第二种是从最后一个倒着匹配,每次匹配都尽量选小的,这样一定能保证字典序最小 type node=record po,next:longint; end; ..] of node; p,cx,cy:..] of longint; v:..] of boolean; i,n,len,x,y,s,d:longint; procedure add(x,y:longint); begin inc(len); e…
题意:http://www.lydsy.com/JudgeOnline/problem.php?id=1562 给一个序列Di表示min(|i-Ti|,n-|i-Ti|),求一个字典序最小的序列Ti sol:  对于每个i,能和它连边的只有i+di和(i-di+n)%n 将图转为二分图,左边为i,右边为Ti,跑匈牙利算法 为避免数组下标越界.memset-1之类麻烦的问题,右移一位处理 P.S.行末不能有空格,文末有回车 #include<iostream> #include<algor…
任意门:http://www.lydsy.com/JudgeOnline/problem.php?id=1562 题目: 对于0,1,…,N-1的N个整数,给定一个距离序列D0,D1,…,DN-1,定义一个变换序列T0,T1,…,TN-1使得每个i,Ti的环上距离等于Di.一个合法的变换序列应是0,1,…,N-1的一个排列,任务是要求出字典序最小的那个变换序列. 题解: 二分建图是显而易见的,可是怎么处理字典序最小? 大神博客:https://www.byvoid.com/blog/noi-20…
Description Input Output Sample Input 5 1 1 2 2 1 Sample Output 1 2 4 0 3 HINT 30%的数据中N≤50:60%的数据中N≤500:100%的数据中N≤10000. Source 这题是二分图应该不难看出来. 对于原序列中的一个点,对应两个可匹配的点. 关键是怎么保证字典序最小 如果是暴力删边+匈牙利的话是$O(n^3)$的. 这里有两种解决方法: 1.强制让$x$号点连向字典序小的点,对失配的点重新匹配 2.将所有边按…
(上不了p站我要死了,侵权度娘背锅) Description Input Output Sample Input 5 1 1 2 2 1 Sample Output 1 2 4 0 3 HINT 30%的数据中N≤50: 60%的数据中N≤500: 100%的数据中N≤10000. (要不是我看不懂它在变什么...) 实际上就是对其中每个元素进行加di mod n或者是减di加n后mod n的操作. 那么每个元素都对应两个元素.而新的序列要求是排列,即不能有相同的.想到二分图匹配,就可得到一一对…