上一页 1 2 3 4 5 6 ··· 30 下一页
  2012年11月10日
摘要: 大意:给定一个MxN大小的方格,地图有3中方格,墙、草地、空地。他的老板希望Robert能在地图中放置尽可能多的机器人。每个机器人可以向四个方向开火,激光可以穿透草地,但不能穿透墙壁。思路:将一行被墙隔开且包含空地的连续区域叫做“块”。 把每个横向“块”看做二部图中的X中的顶点,竖向“块”看做集合中Y的顶点,若两个“块”有公共的顶点空地,于是就连一条边。这样就转换成了没有公共顶点的最大边集,即最大匹配。我们怎么去求“块”呢?用一个2个二维数组xs,ys来对水平方向和垂直方向上的“块”进行编号,编号之后如果两个块有公共的空地的话,那么就在“块”与“块”之间连边。即read_graph(xs[i] 阅读全文
posted @ 2012-11-10 10:39 有间博客 阅读(609) 评论(0) 推荐(0) 编辑
  2012年11月8日
摘要: 注意超int.#include<iostream>#include<cstdlib>#include<cstdio>#include<queue>usingnamespacestd;typedefunsignedlongUL;priority_queue<UL,vector<UL>,greater<UL>>q;intn;voidinit(){while(!q.empty())q.pop();}voidsolve(){ULans=0;while(q.size()!=1){ULa=q.top();q.pop();a 阅读全文
posted @ 2012-11-08 20:41 有间博客 阅读(109) 评论(0) 推荐(0) 编辑
摘要: 可以与Hdu 2527 用一样水过,因为这里不需要求编码,但我写这一题主要是为了学习哈弗曼建树,所以也用建树的写了一遍。CODE:#include<iostream>#include<cstdlib>#include<cstdio>#include<queue>usingnamespacestd;#defineMAXN1001priority_queue<int,vector<int>,greater<int>>q;charstr[MAXN];inthuf[MAXN];intlen;voidsolve(){in 阅读全文
posted @ 2012-11-08 16:02 有间博客 阅读(409) 评论(0) 推荐(0) 编辑
摘要: 1. 哈夫曼树的基本概念哈夫曼树又称最优二叉树,是一种带权路径长度最短的二叉树。所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的路径长度(若根结点为0层,叶结点到根结点的路径长度为叶结点的层数)。树的带权路径长度记为:WPL=(W1*L1+W2*L2+W3*L3+...+ Wn*Ln)N个权值Wi(i=1,2,...n)构成一棵有N个叶结点的二叉树,相应的叶结点的路径长度为Li(i=1,2,...n)。可以证明哈夫曼树的WPL是最小的。为了直观其见,下图中把带权的叶子结点画成方形,其他非叶子结点仍为圆形。请看下图中的三棵二叉树以及它们的带权路径长:注意:这三棵二叉树叶子结点数相 阅读全文
posted @ 2012-11-08 12:13 有间博客 阅读(4380) 评论(0) 推荐(0) 编辑
摘要: 类似HuffMan编码。CODE:#include<iostream>#include<cstdlib>#include<cstdio>#include<queue>usingnamespacestd;#defineMAXN1001priority_queue<int,vector<int>,greater<int>>q;charstr[MAXN];inthuf[MAXN];intn;voidsolve(){intans=0,a,b;while(q.size()!=1){a=q.top();q.pop();b= 阅读全文
posted @ 2012-11-08 11:58 有间博客 阅读(269) 评论(0) 推荐(0) 编辑
  2012年11月7日
摘要: 大意:对一个N*M的棋盘,在格子里放尽量多的一些国际象棋里面的“车”,并且使得他们不能互相攻击,这当然很简单,但是Gardon限制了只有某些格子才可以放,小希还是很轻松的解决了这个问题(见下图)注意不能放车的地方不影响车的互相攻击。所以现在Gardon想让小希来解决一个更难的问题,在保证尽量多的“车”的前提下,棋盘里有些格子是可以避开的,也就是说,不在这些格子上放车,也可以保证尽量多的“车”被放下。但是某些格子若不放子,就无法保证放尽量多的“车”,这样的格子被称做重要点。Gardon想让小希算出有多少个这样的重要点,你能解决这个问题么?思路:1、首先我们考虑以X,Y轴为节点连边,这样的话,就可 阅读全文
posted @ 2012-11-07 22:41 有间博客 阅读(266) 评论(0) 推荐(0) 编辑
  2012年11月6日
摘要: 大意:有一些n只松鼠,m个松鼠洞,以及他们行走的时间s,速度v,如果有一些松鼠不能进洞的话,那么他是脆弱的,请问使得产生最少“脆弱”的松鼠的行走方案是什么?最少有几只“脆弱”的松鼠。思路:我们把问题转换一下,最少的“脆弱”松鼠->最大的进洞的松鼠。明显该图是二分图,那么我们以v*s为标准,如果两点间的距离dist<= v*s,那么则连一条边,否则不进行任何操作,然后问题就是经典的二分图最大匹配。另外:宏定义 #define MAXM 210*210 竟然报错。。。CE N次。CODE:#include<string.h>#include<stdio.h>#i 阅读全文
posted @ 2012-11-06 20:27 有间博客 阅读(774) 评论(0) 推荐(0) 编辑
摘要: 大意:给你一些人,有些相互认识,有些不认识,问你是否能将不认识的分在一组,如果不能,输出No,如果可以,输出可以预定的双人间的最大值。思路:1、交叉染色法判断二分图。2、二分图最大匹配。我敲的时候出现了小错误,然后爆栈了。以为是DFS太多导致,于是我改用队列实现的交叉染色,过了。敲二分匹配时突然发现了一个小错误,明白了是这个导致了爆栈。然后回过头去改DFS实现的交叉染色,Hdu的数据实在是太水了,有些地方我一不小心改成错误的,还是过了,但这在UVA上是绝对过不了的,比如UVA 10004二分染色。CODE:#include<iostream>#include<cstring& 阅读全文
posted @ 2012-11-06 12:58 有间博客 阅读(428) 评论(0) 推荐(0) 编辑
  2012年11月5日
摘要: 同Hdu 2119 Matrix.CODE:#include<iostream>#include<cstring>#include<cstdio>usingnamespacestd;#defineMAXN510#defineMAXM10010structEdge{intv,next;}edge[MAXM];intn,m;intcnt;intfirst[MAXN],link[MAXN];boolvis[MAXN];voidinit(){cnt=0;memset(first,-1,sizeof(first));memset(link,-1,sizeof(link 阅读全文
posted @ 2012-11-05 19:26 有间博客 阅读(176) 评论(0) 推荐(0) 编辑
摘要: 大意:给你一个0/1矩阵,以及一把枪,一枪可以打掉同一行或者同一列上的1,问你最少几次可以把1全部变为0?思路:我们以x,y轴为顶点建立二分图,如果数字为1的话,那么就连一条边,其实就转换成了最小顶点覆盖的问题,然后用ED算法求二分最大匹配即可.注意:1、最大的匹配顶点数应该为n,所以for(int i = 1; i <= n; i++) ED(i);2、矩阵数据范围是1~100,所以最大的边数应该是100*100才对,否则RE.CODE:#include<iostream>#include<cstring>#include<cstdio>usingn 阅读全文
posted @ 2012-11-05 19:17 有间博客 阅读(481) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 ··· 30 下一页