HDU 3315 KM My Brute】的更多相关文章

参考题解 二分图的最优匹配.图很容易建立.再处理相似度的时候.把每个权值扩大100倍.然后再对i==j时 特殊标记.使他们的权值再++1.后面选择的时候就很容易挑出.按原匹配 匹配的个数. 100*(double)(res%100)/n.即可得到第二问. #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <vector> #…
职务地址:HDU 3315 这个题的思路全然是自己想出来的,自我感觉挺巧妙的. . .(大牛勿喷.. . )对大胆建图又多了一份信心. 详细思路是构造一个二分图,Si连源点.Xi连汇点,流量都是1,费用0.然后当Si能够赢Xj的时候,就对这两人连一条边,费用值为-Vi*1000,假设i==j的话.费用值就再减1,由于题目要求尽量不改变原先的顺序.所以说应该尽量让序号同样的对打.而费用值减1的话,会优先考虑序号同样的,并且让费用扩大了1000倍.此时也不会改变基本的分数因素大小. 同理.输的话.费…
题意: 有S1到Sn这n个勇士要和X1到Xn这n个勇士决斗,初始时,Si的决斗对象是Xi. 如果Si赢了Xi,那么你将获得Vi分,否则你将获得-Vi分. Si和Xi对决时,Si有初始生命Hi,初始攻击Ai, Xi有初始生命Pi,初始攻击Bi. 且Si先出手,然后Xi失去Ai生命,之后如果Xi没死,那么Xi出手,Si失去Bi生命. 直到有一方的生命值<=0时,决斗结束. 现在要你重新安排S和X的决斗顺序,使得你能获得的分最多.如果有多个最优解,你要选取那个维持初始决斗顺序最多的解. 解析: 仔细看…
http://acm.hdu.edu.cn/showproblem.php?pid=3315 题意: 有S1到Sn这n个勇士要和X1到Xn这n个勇士决斗,初始时,Si的决斗对象是Xi. 如果Si赢了Xi,那么你将获得Vi分,否则你将获得-Vi分. Si和Xi对决时,Si有初始生命Hi,初始攻击Ai, Xi有初始生命Pi,初始攻击Bi. 且Si先出手,然后Xi失去Ai生命,之后如果Xi没死,那么Xi出手,Si失去Bi生命. 直到有一方的生命值<=0时,决斗结束. 现在要你重新安排S和X的决斗顺序,…
http://acm.hdu.edu.cn/showproblem.php?pid=2853 题意:给一个n-m二分图,边权用一个n*m的矩阵表示,给出初始匹配,求二分图完美匹配相比初始匹配改变了几条边以及改变的数值 这类题的主要思想是增加原配边的权值,但又不影响最后结果. 步骤1:观察顶点数,每条边乘一个大于顶点数的数v 步骤2:对于原配边,每边加1(注意步骤2可以保证km()/v的结果与原结果相同) 步骤3:求完美匹配,答案为res,改变的边数=n-res%v(res%v表示完美匹配中有多少…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2853 题目大意:二分图匹配费用流.①最大匹配②最小原配变动 解题思路: 如果去掉第二个要求,那么就是裸KM. 然而加上第二个要求,那么就需要一种新的建图方式. 建图 对于输入矩阵,每一条边,cost扩大K倍($K=n+1$) 对于原配,每一条边cost在扩大K倍基础上+1 KM 统计cost时,直接把cost整除K,然后累加. 并且Hash一下原配边的变动情况. 扩大K倍的作用 准确来说,K倍是为了…
http://acm.split.hdu.edu.cn/showproblem.php?pid=2255 带权匹配问题: #include <stdio.h> #include <algorithm> #include <string.h> #include <vector> using namespace std; #define maxn 330 #define INF 0xfffffff int maps[maxn][maxn], vx[maxn],…
题意: 一张完备二分图求最优完备匹配. SOL: 这题就不讲什么sol了...毕竟是裸的KM,不会的话可以看老人家的大白鼠,一些问题看代码注释.讲讲经历(悲惨的经历) 刚打完,自信地交上去发现MLE...一脸大雾...然后才开始看数据..300^4啊...看起来会炸的样子,那么加个优化好了.还是MLE!真是奇了怪了.然后就在提交里看别人是不是用的邻接表——清一色邻接矩阵!再想想KM搞的都是完备图啊邻接表和邻接矩阵用起来没什么不同.那么没问题啊?然后交来交去交了8次...直到zyh大神——虽然他从…
Tour Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Total Submission(s): 2925    Accepted Submission(s): 1407 Problem Description In the kingdom of Henryy, there are N (2 <= N <= 200) cities, with M (M <= 30000…
http://acm.hdu.edu.cn/showproblem.php?pid=4862 选t<=k次,t条路要经过全部的点一次而且只一次. 建图是问题: 我自己最初就把n*m 个点分别放入X集合以及Y集合,再求最优匹配,然后连例子都过不了,并且事实上当时解释不了什么情况下不能得到结果.由于k此这个条件相当于没用上... 建图方法: 1.X集合和Y集合都放入n*m+k个点,X中前n*m个点和Y中前n*m个点之间.假设格子里的值相等.权就是(收益-耗费),不等就是(-耗费),由于要的是最大收益…
和HDU 3488一样的,只不过要判断一下是否有解. #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <vector> using namespace std; + ; const int INF = 0x3f3f3f3f; int n, m; int W[maxn][maxn], lft[maxn]; int slack…
A simple brute force problem. Time Limit: 1000ms Memory Limit: 65536KB This problem will be judged on HDU. Original ID: 497164-bit integer IO format: %I64d      Java class name: Main There's a company with several projects to be done. Finish a projec…
题意 求二分图最小完备匹配. SOL 建个图那么方便的事情是吧...然后边权都是正的(好像根边权也没什么关系),既然要求最小那么把边权取个相反数跑个KM就好了.. CODE: /*========================================================================== # Last modified: 2016-02-16 19:55 # Filename: hdu1533.cpp # Description: ============…
Going Home Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 3299    Accepted Submission(s): 1674 Problem Description On a grid map there are n little men and n houses. In each unit time, every l…
奔小康赚大钱 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 10760    Accepted Submission(s): 4765 Problem Description 传说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革:重新分配房子.这可是一件大事,关系到人民的住房问题啊.村里共有n间房间,刚好有n家老百姓,考虑…
以前用KM写过,现在再用费用流写. #include <iostream> #include <cstdio> #include <cstring> #include <queue> #include <vector> #include <utility> #define abs(a) ((a)<0?-(a):(a)) #define maxn 210 #define oo 0x3f3f3f3f using namespace…
Mining Station on the Sea Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2997    Accepted Submission(s): 913 Problem Description The ocean is a treasure house of resources and the development o…
Special Fish Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2189    Accepted Submission(s): 826 Problem Description There is a kind of special fish in the East Lake where is closed to campus of…
A new Graph Game Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2360    Accepted Submission(s): 951 Problem Description An undirected graph is a graph in which the nodes are connected by undire…
参考题解 这题注意有重边.. #include <cstdio> #include <cstring> #include <algorithm> using namespace std; + ; int n, m; int W[maxn][maxn], lft[maxn]; int Lx[maxn], Ly[maxn]; bool S[maxn], T[maxn]; int slack[maxn]; bool match(int u) { S[u] = true; ;…
#include<stdio.h> #include<math.h> #include<string.h> #define N 200 #define inf 999999999 int Max(int a,int b ) {     return a>b?a:b; } int Min(int a,int b) {     return a>b?b:a; } int map[N][N],lx[N],ly[N],s[N],t[N],link[N],n,m,ot…
题意:n(n <= 20)个项目,m(m <= 50)个技术问题,做完一个项目能够有收益profit (<= 1000),做完一个项目必须解决对应的技术问题,解决一个技术问题须要付出cost ( <= 1000),技术问题之间有先后依赖关系,求最大收益. 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4971 -->>项目必须解决相应的技术问题,技术问题之间也存在依赖,相应闭合图,最大收益相应最大权和..于是,最大权闭合图…
为什么可以这样拆点在 这道题 都已经证明过 代码: 1 //题目上面说了"The only exception is that the first and the last city should be the same and this city is visited twice." 2 //我还以为是起点要使用两次,没想到题意就是全部点连接之后出入度都为1 3 4 //题意:有n座城市,m条带权有向边.有人想要游历所有城市,于是制定了计划:游历的路径是一个或者多个环,且所有城市都必…
有n(20)个工程,完成每个工程获得收益是p[i],m(50)个需要解决的难题,解决每个难题花费是c[i] 要完成第i个工程,需要先解决ki个问题,具体哪些问题,输入会给出 每个难题之间可能有依赖关系,比如i->j就是解决问题j需要实现解决问题i.(题目描述有问题,但是按照样例来看,是前后说反了,也就是按照题意这个地方反向建图就可以) 问,最大收益可以是多少 比较裸的最大权闭合图,解决最大权闭合图一般用最大流的方法 然而训练的时候并不知道这个,所以结束后看了看相关的资料, 下面仅说明一下建图方法…
说是最大权闭合图.... 比赛时没敢写.... 题意 一共同拥有n个任务,m个技术 完毕一个任务可盈利一些钱,学习一个技术要花费钱 完毕某个任务前须要先学习某几个技术 可是可能在学习一个任务前须要学习另几个任务 求最多能赚多少钱咯 先将缩点将须要一起学掉的技术缩成一个点 建s--任务 权值为该任务盈利多少钱 建技术(缩点后)-t 权值为学习这技术的花费(总) 任务-技术 (完毕该任务所需的每一个技术都须要建边)权值为INF #include<stdio.h> #include<stdli…
Assignment Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1068    Accepted Submission(s): 551 Problem Description Last year a terrible earthquake attacked Sichuan province. About 300,000 PLA s…
Cyclic Tour Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/65535 K (Java/Others)Total Submission(s): 1197    Accepted Submission(s): 626 Problem Description There are N cities in our country, and M one-way roads connecting them. Now Li…
http://acm.hdu.edu.cn/showproblem.php?pid=2853 这道题初看了没有思路,一直想的用网络流如何解决 参考了潘大神牌题解才懂的 最大匹配问题KM 还需要一些技巧来解决最小变动, 做法是:把原先的邻接矩阵每个数扩大k倍(k>n) 为了突出原先的选择,也就是同等情况下优先选择原来的方案 给原来的方案对应矩阵内的数据+1 那么 最终得出的最大匹配值/k=真实的最大匹配 最终得出的最大匹配值%k=原来的方案采用了几个 这里的KM留下来做模板 /* 二分图最佳匹配…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2853 题意:有n个公司,m个任务,每个公司做每个任务都有一个效率值,最开始每个公司都指派了一个任务,现在要你重新给每个公司分配一个任务(一个任务只能分配给一家公司),使得所有公司任务的效率值最大,并且改变的原始任务最少. 思路:把每条边的权值扩大k倍(k>n),然后属于原始任务的边权值+1,权值加1是为了当两条边权值相同时,更优先选择属于原始任务的边,扩大k倍的巧妙之处不仅在于KM匹配时优先选择原始…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2255 题意:有N个人跟N个房子,每个人跟房子都有一定的距离,现在要让这N个人全部回到N个房子里面去,要求所有人回去的距离最短. KM算法模板题~ #include "stdio.h" //hdu 2255 #include "string.h" #include "stdlib.h" #define N 305 #define INF 0x3ffff…