狂撸题
文章平均质量分 71
PathToGod_CODER
只会写HelLoworld的弱渣
展开
-
hdu1233 采用kruskal的最小生成树
kruskal和prim算法都有额外的东西要写,prim需要写队列容器,kruskal需要写并查集,不过kruskal易于理解,并且kruskal的对象是边,本次采用kruskal算法解决该题题目是给N个村庄和每个村庄间的距离,求其中的最小生活树注意要处理好村庄和边的数目之间的关系#include #include #include #include #include原创 2015-11-21 09:57:05 · 364 阅读 · 0 评论 -
借鉴dijstra写的prim算法
在挑战程序设计竞赛那本书上看prim代码,总感觉别扭,而我又不喜欢那种代码方式,比较喜欢dijstra采用优先队列的顺序,所以就自己写了一个用优先队列的prim算法,用于日后使用。贴代码:#include #include #include #include #include #include #include using namespace std;i原创 2015-11-20 21:07:46 · 462 阅读 · 0 评论 -
poj3255次短距离 dijkstra
虽然是水题, 但是一次照样写不对。虽然是次短距离,但是是比最短距离短的距离,而不是小于等于最短距离的距离。为什么这个dijkstra没用used标记,因为题目中说了,所有路可以走无限次具体还是看代码吧#include #include #include #include using namespace std;//结构体typedef str原创 2015-11-23 20:40:01 · 341 阅读 · 0 评论 -
hdu2196经典树形dp
借鉴于:http://blog.csdn.net/shuangde800/article/details/9732825做了一题就可以把很多此类类型题给弄懂了,该题的意思大概就是给你N个点M条边,求出每个点距离其他点的最远距离。思路是把该无向图转换成有向图如下图定义f[i][0] 为i这棵子树上,距离i的最大距离f[i][0]定义为,除了这课原创 2015-11-23 19:19:58 · 380 阅读 · 0 评论 -
hdu1142 dijstra + 记忆化搜索
题目难以理解,不过最后百度后才理解的大意,其中有一个关键的意思是,如果A到B直接相连,且从A到终点的最短路径大于从B到终点的最短路径,则该人可以从A走向B,问这样走下去,合法路径一共有多少。直接贴代码,该题让我练习了一下dijkstra和记忆化搜索,说实话,记忆化搜索对于我来说,还真是硬伤。还得没事多练习下。/*His office is numbered 1,and原创 2015-11-19 20:13:03 · 282 阅读 · 0 评论 -
hdu1232 并查集
虽然是很水很水很水很水的题,但是我的目标就是把A过的题都贴在博客上,所以如果有大神看见了小人的博客,还忘轻喷。#include #include using namespace std;const int MAX_N = 1005;int par[MAX_N]; //从1开始计算int height[MAX_N];int visited[MAX_N];int原创 2015-11-17 22:06:05 · 342 阅读 · 0 评论 -
hdu1025 超经典最长上升子序问题
/* 2015.11.16 1025.最长上升自序问题 n(1 ≤ n ≤ 500,000) Sample Input21 22 131 22 33 1Sample OutputCase 1:My king, at most 1 road can be built.Case 2:My king, at most 2 roads ca原创 2015-11-16 21:01:27 · 323 阅读 · 0 评论 -
hdu1102 最小生成树 特殊处理
该题是最小生成树的变形,因为给出的是任何两个点之间的距离,且其中某些路已经修理,问额外修理的路的总长是多少如果按最小生成树的算法来算,比如 ,我用的是prim算法,刚开始使用的时候,我的想法是这样,用used[]数组来储存某点是否已经用过,如果a和b点已经修过了路,则used[a]和used[b]都赋值为1,然后把两点间的距离设置为0,再把两点push到优先队列中。而这种想法是错的,因为即原创 2015-11-20 22:34:47 · 451 阅读 · 0 评论 -
hdu4081 最小生成树的变形,通过此题理解了什么时候不能用优先队列实现prim算法
问题大概思路,摘选自网络:我就不说题意了,为了使A/B最大,就应该是B越小,故可以先求出n个点的最小生成树。因此,可以枚举每一条边,假设最小生成树的值是B, 而枚举的那条边长度是edge[i][j], 如果这一条边已经是属于最小生成树上的,那么最终式子的值是A/(B-edge[i][j])。如果这一条不属于最小生成树上的, 那么添加上这条边,就会有n条边,那么就会使得有了一个环,为了使得它还原创 2015-11-22 11:09:21 · 894 阅读 · 0 评论 -
POJ2342 简单树形dp
因为在做HDU4126的时候需要使用树形dp,然而我对树形dp一点也不了解,所以做一下树形dp的题来加深其了解,题目不说了dp方程是 : dp[i][0] += max(dp[j][0],dp[j][1]) //i是j的父亲dp[i][1] += dp[j][0] 其中dp[i][0] 表示该人没来dp[i][1]表示该人来了贴代码#i原创 2015-11-22 17:56:07 · 467 阅读 · 0 评论 -
hdu1217 floyd
1217 floyd算法 不过算的是相乘的最大值写完后一直在纠结对不对,因为如果出现ex[i][k] ex[k][j]均为-1时,相乘即为1这样就乱套,但是交了之后过了, 说明测试数据中,并没有给出孤立的国家如果国家间利率没有联系,则赋为-1贴上代码:#include #include #include #include #include using namespa原创 2015-11-20 00:45:43 · 336 阅读 · 0 评论 -
hdu4126树形dp + 错误分析
先贴第一次写的代码#include #include #include #include using namespace std;//结构体//常量const int N_MAX = 3005;const int M_MAX = 9000005;const int INF = 1000000000;//变量int N, M, Q; //N个村庄M条路vecto原创 2015-11-25 22:17:46 · 437 阅读 · 0 评论