文章分类 -  HDU

1 2 下一页

HDU 3177
HDU 2489 DFS枚举所有组合+最小生成树
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2489题目大意:给出N个点,每个点都有点权值,再给出整张图的边权值[1,100](即每条边的权值都大于0),然后在限制的M个点数中找出最小的ratio,。思路:DFS枚举所有点的组合情况,用枚举出来的点建立一张子图。然后再用最小生成树求出子图最小边权值的和。代码: 1 #include 2 using namespace std; 3 #define maxn 22 4 int f[maxn][maxn],g[maxn][maxn]; 5 int vis[maxn],ans[maxn],dis[ma 阅读全文

posted @ 2013-07-29 11:38 acoderworld 阅读(127) 评论(0) 推荐(0)

HDU 1598--并查集+贪心
摘要:题意:中文题,不解释。思路:按照Flycar的速度(即边权)排序,通过并查集依次将边添加进去,枚举各种情况。AC代码:View Code 1 #include<iostream> 2 #include<algorithm> 3 using namespace std; 4 struct node { 5 int s,t,v; 6 bool operator < (const node &cmp) const{ 7 return v<cmp.v; 8 } 9 }edge[1010];10 int p[222];11 int findx(int x)12 阅读全文

posted @ 2013-04-29 20:46 acoderworld 阅读(79) 评论(0) 推荐(0)

HDU 1198--并查集
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1198并查集,把每个方块编号,然后有联通的将其并起来,方向的控制及编号的处理比较复杂。代码:View Code 1 #include<iostream> 2 using namespace std; 3 int farm[11][4]={{1,0,0,1},{1,1,0,0},{0,0,1,1},{0,1,1,0},{1,0,1,0}, 4 {0,1,0,1},{1,1,0,1},{1,0,1,1},{0,1,1,1},{1,1,1,0},{1,1,1,1}};//将A~H的水管方向按照上、右、下 阅读全文

posted @ 2013-03-04 14:58 acoderworld 阅读(58) 评论(0) 推荐(0)

hdu 3954--线段树
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=3954题意:有N个英雄,每个英雄的初始等级为1,初始经验为0,有K个等级,QW个操作。接下来一行中有K-1个数值,代表升到等级2,等级3……所要达到的经验。接下来的QW行里,每行是一个操作,操作有两类,(1)"l r e",代表区间[l,r]里的每个英雄将得到e乘以他的等级的经验。(2)"l r",表示查询区间[l,r]里经验最大值。思路:这题因为加的经验跟等级有关,所以不能用普通的惰性标记。应该往什么时候区间内加的经验是一样的方向思考???刚开始思考的时候是想着区间内 阅读全文

posted @ 2013-02-21 12:01 acoderworld 阅读(327) 评论(0) 推荐(0)

hdu 3265--线段树扫描线
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=3265题意:矩形面积并思路:把切割完的面积分成四份,然后用扫描线扫描。注意要用__int64存。代码:View Code 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath> 5 #include<algorithm> 6 using namespace std; 7 #define maxn 55555 8 #define lson l,m,rt& 阅读全文

posted @ 2013-02-19 13:56 acoderworld 阅读(91) 评论(0) 推荐(0)

hdu 1828--线段树扫描线
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1828题意:矩形周长并思路:与面积不同的地方是还要记录竖的边有几个(hsum记录),并且当边界重合的时候需要合并(用lbd和rbd表示边界来辅助)View Code 1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<cstring> 5 #include<cmath> 6 using namespace std; 7 #define maxn 55555 阅读全文

posted @ 2013-02-19 13:53 acoderworld 阅读(77) 评论(0) 推荐(0)

hdu 1542--线段树扫描线
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1542题意:矩形面积并思路:浮点数先要离散化;然后把矩形分成两条边,上边和下边,对横轴建树,然后从下到上扫描上去,用cnt表示该区间下边比上边多几个,sum代表该区间内被覆盖的线段的长度总和这里线段树的一个结点并非是线段的一个端点,而是该端点和下一个端点间的线段,所以题目中r+1,r-1的地方可以自己好好的琢磨一下View Code 1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #includ 阅读全文

posted @ 2013-02-19 13:50 acoderworld 阅读(93) 评论(0) 推荐(0)

hdu 1258--DFS
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1258题目描述:给你一个数t作为最后等式的和,并给你一组数a[i](i<12)作为等式的加数,每个加数最多只能使用一次,要求输出所有满足条件(加数从大到小输出)的等式,并且不能重复。例:t=4. a[]={4,3,2,2,1,1}输出 4,3+1,2+2,2+1+1解题思路:题目要求输出从大到小输出,所以可以先给所有的数进行降序排序。数据的规模很小,所以可以用暴力搜索。搜索过程中,为了避免重复输出,需要记录前一层搜索的起点,下一层递归搜索的起点不能与前一层记录的点一样...说不清楚,具体见代码 1 #i 阅读全文

posted @ 2013-02-19 13:44 acoderworld 阅读(115) 评论(0) 推荐(0)

HDU 4027--线段树
摘要:线段树,这里看起来有点像是成段更新,但是又不太像,不需要用到标记。。题意:给你N个数,有M个操作,操作有两类,(1)"0 l r",表示将区间[l,r]里的每个数都开根号。(2)"1 l r",表示查询区间[l,r]里所有数的和。这个题有两个注意的地方,一个是在更新sum的时候有个技巧,如果这个和等于区间的子树个数,即sum[rt]==r-l+1,这个时候就不用更新了。。因为sqrt(1)==1;否则会超时。然后还有一个比较坑爹的地方,这里的a可能比b大。。。View Code 1 #include<iostream> 2 #include& 阅读全文

posted @ 2013-02-07 21:52 acoderworld 阅读(89) 评论(0) 推荐(0)

HDU 1698---线段树
摘要:线段树成段更新模板题。。题意:给你T组数据,N个数(初始时每个数的值为1),M个操作,每个操作把区间[a,b]里的数更新为c,问最后这N个数的和是多少。代码: 1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 #define maxn 100100 5 #define lson l,m,rt<<1 6 #define rson m+1,r,rt<<1|1 7 int sum[maxn<<2],flag[maxn<<2]; 8 void Push 阅读全文

posted @ 2013-02-07 21:47 acoderworld 阅读(89) 评论(0) 推荐(0)

HDU 2048--错排
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=2048中文题,不解释。。错排证明:递推数列法对于排列数较多的情况,难以采用枚举法。这时可以用递归思想推导错排数的递推公式。显然D1=0,D2=1。当n≥3时,不妨设n排在了第k位,其中k≠n,也就是1≤k≤n-1。那么我们现在考虑第n位的情况。当k排在第n位时,除了n和k以外还有n-2个数,其错排数为Dn-2。当k不排在第n位时,那么将第n位重新考虑成一个新的“第k位”,这时的包括k在内的剩下n-1个数的每一种错排,都等价于只有n-1个数时的错排(只是其中的第k位会换成第n位)。其错排数为Dn-1。所以当n排 阅读全文

posted @ 2013-02-06 21:56 acoderworld 阅读(89) 评论(0) 推荐(0)

HDU 1166--线段树模板题
摘要:中文题,不解释。线段树的模版题,暴力都可以过。。。思路:线段树区间求和。代码: 1 #include<cstdio> 2 #include<iostream> 3 using namespace std; 4 #define lson l,m,(rt<<1) 5 #define rson m+1,r,(rt<<1|1) 6 const int maxn=50010; 7 int sum[maxn<<2]; 8 void Pushup(int rt) 9 {10 sum[rt]=sum[rt<<1] + sum[rt< 阅读全文

posted @ 2013-02-06 21:53 acoderworld 阅读(123) 评论(0) 推荐(0)

HDU 1754--线段树
摘要:中文题,不解释。。思路:线段树功能:update:单点替换 quary:区间最值代码: 1 #include<cstdio> 2 #include<iostream> 3 using namespace std; 4 #define maxn 200100 5 #define lson l,m,rt<<1 6 #define rson m+1,r,rt<<1|1 7 int Max[maxn<<2]; 8 int MMax(int a,int b) 9 {10 return a<b?b:a;11 }12 void Pushup( 阅读全文

posted @ 2013-02-06 21:50 acoderworld 阅读(37) 评论(0) 推荐(0)

HDU 1394--线段树(求逆序数)||暴力
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1394题意:给你一个有0--n-1数字组成的序列,然后进行这样的操作,每次将最前面一个元素放到最后面去会得到一个序列,那么这样就形成了n个序列,那么每个序列都有一个逆序数,找出其中最小的一个输出!这里有个技巧,就是算完第一组的逆序数后,后面移动得来的逆序数可有sum+n-a[i]-1-a[i]得;暴力写法: 250msView Code 1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 int main() 阅读全文

posted @ 2013-02-06 21:47 acoderworld 阅读(84) 评论(0) 推荐(0)

HDU 2795 Billboard--线段树
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=2795题意:有一块板,规格为h*w,然后有n张海报,每张海报的规格为1*wi,选择贴海报的位置是:尽量高,同一高度,选择尽量靠左的地方。要求输出每张海报的高度位置。输入的时候有一点优化的地方,就是如果h>n的时候,可以让h=n。因为一张海报的宽度不会超过版块的宽度,所以版块高度不用多于海报数量。否则的话会内存爆掉。思路:线段树存剩下的最大宽度,每次找到最大值的位子,然后减去x;注意的地方:在代码中有注释,因为那里wa了数次;一开始的时候是没有判断当前节点的最大值有没有比x大,如果在找到节点的那里再要在判 阅读全文

posted @ 2013-02-06 21:35 acoderworld 阅读(58) 评论(0) 推荐(0)

HDU 2846--字典树
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=2846题意是给出一些模式串,再给出几个询问,询问给出的字符串在多少个模式串中出现比如字符串abc所含的字串有a,ab,abc,b,bc,c可用字典树解决,字典树能很好的处理前缀出现的次数,所以可将模式串分解,依次插入需要注意的是对于同一个模式串的不同子串可能有相同的前缀,为了避免多次计算,可以添加字典树节点的信息,添加num记录最后插入的字符串是第num个模式串的子串。关键在于怎么控制避免多次计算。。。在写的时候脑残的先计数然后在进行移位,应该要反过来。。。 1 #include<iostream> 阅读全文

posted @ 2013-02-05 16:10 acoderworld 阅读(71) 评论(0) 推荐(0)

HDU 1075--字典树
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1075字典树,就是输入的字符处理比较恶心,还有应该注意的是避免前缀问题。。如:字典里有liwo,但是查找liw的时候应该是找不到的,不能单从NULL判断有没有找到,还要看那个节点是否有存字符串。。代码: 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 struct node{ 6 char a[25]; 7 node *next[26]; 8 node( 阅读全文

posted @ 2013-02-05 14:35 acoderworld 阅读(145) 评论(0) 推荐(0)

HDU 2063--二分匹配
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=2063该题解法思想是:从第一个女生开始遍历,用女生去选择男生,男生这时还没被选走则马上选走他,接着第二个女生开始选,如果他想要的男生没被选走,当然就选上了,如果该男生已经被选走的话,则开始和前面的选择此男生的女生商量,看她能不能选择别的女生,如果可以的话,就叫该女生选择别的男生,则该男生就属于你了,如果和这个女生商量不成,则换一个男生接着匹配,若没有男生了,则只能守寡了,以此类推……二分图思想:(匈牙利算法)二分图又称作二部图,是图论中的一种特殊模型。 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不 阅读全文

posted @ 2013-02-04 20:34 acoderworld 阅读(60) 评论(0) 推荐(0)

HDU 1385--最短路 记录路径
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1385题意:有N个城市,已知每两个城市间的距离花费,以及经过每个城市需要收取的税金。然后若干组输入,每组输入是 起点s和终点t, 输出从s到t的最小费用路径,并输出最小费用。最小费用路径有多条时,输出字典序最小的。floyd 算法。这题参照了网上的代码,记录路径的方法挺巧,第一次写记录路径的题目。 1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 #define INF 0x3f3f3f3f 5 #defi 阅读全文

posted @ 2013-02-04 20:28 acoderworld 阅读(157) 评论(0) 推荐(0)

HDU 1142--最短路 SPFA+DFS记忆化搜索
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1142这题题目看了非常久,英文不好伤不起啊。。题意:看样子很多人都把这题目看错了,以为是求最短路的条数。真正的意思是:假设 A 和 B 是相连的,当前在 A 处,如果 A 到终点的距离大于 B 到终点的距离,则可以从 A 通往 B 处,问满足这种的条件的路径条数。分析:1、以终点 2 为起点 SPFA; 2、直接DFS记忆化搜索。 1 #include<iostream> 2 #include<cstdio> 3 #include<queue> 4 using namesp 阅读全文

posted @ 2013-02-04 20:22 acoderworld 阅读(51) 评论(0) 推荐(0)

1 2 下一页

导航