上一页 1 2 3 4 5 6 7 ··· 9 下一页
2011年10月29日

poj1724ROADS(优先队列+BFS 有条件的最短路)

摘要: http://poj.org/problem?id=1724/*poj1724ROADS题意是在一定的coins的限制下的最短路径;可以用Dijkstra的变形(BFS+优先队列);用邻接边来存储边;松弛过程中用优先队列(边的长度短的优先)来存储边,将符合条件(coins限制)的边都加入优先队列;直到找到延伸到最后一个顶点即可终止循环; 因为最先到达的一定是最短路径,在coins的限制条件下;*/View Code #include<iostream>#include<algorithm>#include<queue>using namespace std; 阅读全文
posted @ 2011-10-29 09:52 4.5.6 阅读(291) 评论(0) 推荐(0) 编辑
2011年10月28日

hdu4043FXTZ II(大数+数学)

摘要: /*hdu4043FXTZ II(引用)题意:A、B两人初始血量相同,有n个技能,伤害分别为^i(i=,,,…,n-1),每随机(机会均等)选择一个技能随机(机会均等)打向A或B,直到技能用完,每个技能只被选择一次,且每次攻击后A的血量只要有一次超过B的血量,则A赢B输,问B赢的概率是多少。要求用最简分数表示。思路:当n=1时,p1 = 1/2当n=2时,第一个技能伤害如果是,只要第一个打出的技能打向A,则B必胜,这个事件发生的概率为/2 * 1/2;第一个如果是,那么只有两技能都打向A,B才能胜,事件发生的概率为/2 * 1/2 * 1/2;.则p2 =1/4 + 1/8 = 3/8当n=3 阅读全文
posted @ 2011-10-28 23:36 4.5.6 阅读(164) 评论(0) 推荐(0) 编辑

poj1251Jungle Roads

摘要: http://poj.org/problem?id=1251/*poj1251Jungle Roads最小生成树(裸题)题意:给出道路(两端点和权值) 求最小费用使所有城市相连*/View Code #include<iostream>#include<algorithm>using namespace std;#define MAXN 27int pre[MAXN];int fee;struct node{ int u,v,w;}e[MAXN*MAXN];bool cmp(const node&a,const node&b){ return a.w&l 阅读全文
posted @ 2011-10-28 23:21 4.5.6 阅读(178) 评论(0) 推荐(0) 编辑
2011年10月27日

poj1236Network of Schools

摘要: /*poj1236Network of Schools题意:网络中有一些学校,每个学校可以分发软件给其他学校。可以向哪个分发取决于他们各自维护的一个清单。有两个问题,:1:至少要copy多少份新软件给那些学校,才能使得每个学校都能得到。2:要在所有的学校的清单里面至少一共增加几项才能使得 把软件给任意一个学校,所有的学校都能收得到。思路:问题一:要使每个学校都能收到,就是计算图里面一共有多少入度是的点,这个好理解。 问题二:先学习下计算强连通分支的算法——Tarjan, 然后缩点,把每一块看成一个点,出来一个新的有向图。然后计算出度为的入度为的点各有多少,大的那个就是答案。值得注意的是,当只有 阅读全文
posted @ 2011-10-27 23:32 4.5.6 阅读(195) 评论(0) 推荐(0) 编辑

zoj1990Subway Tree Systems(树的最小表示)

摘要: View Code /*zoj1990Subway Tree Systems题目大意:初始时站在树的根节点,若朝着远离根的方向走,记录“”,接近根的方向走记录“”。并且树的每一条边只能来回走一次(即向下和返回)。一个合法的序列可以描述出一棵树的形态。现在给出两个合法的序列,判断两棵树是否同构。分析:由于根节点确定,若两棵树同构,无非就是把子树的位置交换了一下。很自然的想法就是:将树的子树按照某种规则进行排序,若排序之后两个字符串相等,则同构;否则不同构。现在来分析一下序列,可以看出,当一个串的“”和“”个数相等时,恰好就是一棵子树。例如:0010011101001011可以划分为一下三棵子树0 阅读全文
posted @ 2011-10-27 13:33 4.5.6 阅读(370) 评论(0) 推荐(0) 编辑

poj1161Walls

摘要: View Code /*poj1161Walls1.求与城市连接的区域,即环绕城市,能从城市直接到达的区域:若区域i的边界点里包含城市A,则A与区域i是连接的。2.求与区域连接的区域(这是主要的难点):因为区域的边界是按照顺时针排列的,假如说区域i边界点有a, b,这说明边界a-b是与区域i是相邻的,这时如果区域j的边界点有b, a(注意不是a, b,因为在区域i是顺时针,那么在区域j就是逆时针了),这说明边界b-a是与区域j是相邻的,于是i与j就相邻了。注意一条边只能与两个区域相邻*/#include<iostream>#include<algorithm>#incl 阅读全文
posted @ 2011-10-27 13:32 4.5.6 阅读(352) 评论(0) 推荐(0) 编辑

hdu4076Haunted Graveyard

摘要: View Code /*hdu4076Haunted Graveyard题意:一块h*w的墓地,每个格子可能是石头(障碍),洞(在t秒后到达某个位置,t可能为负),草地(,0)为入口,(h-1,w-1)为出口。问从入口到出口的最短用时,若到不了输出Impossible,若用时无限小输出Never无限小:存在负权回路思路:存在负权,显然要用spfa。当对某一个点的松弛次数超过该图的顶点数h*w时就表示存在负权回路。但是有一点需要注意:判断负权回路的时候不能把终点算在内,因为当第一次走到终点的时候就走出去了,终点不会对他的后继点进行松弛。*/#include<iostream>#inc 阅读全文
posted @ 2011-10-27 13:32 4.5.6 阅读(196) 评论(0) 推荐(0) 编辑

hdu4034Graph

摘要: View Code /*hdu4034Graph给出任意两点的最短距离,求出图中最少边数,如果这样的图不存在输出impossible1.floyd去松弛每条边,如果能松弛,则不合理。2.floyd判断d[i][j]能否表示为d[i][k]+d[k][j]的形式,这样就可以去掉一条边了(假设开始所有顶点间都有边)。3.ans=n*(n-1)-cnt. 即总边数-可以去掉的边。*/#include<iostream>#include<algorithm>using namespace std;#define MAXN 105#define INF 1000000000int 阅读全文
posted @ 2011-10-27 13:31 4.5.6 阅读(124) 评论(0) 推荐(0) 编辑

poj1135Domino Effect

摘要: View Code /*poj1135Domino Effect有n个关键的多米诺骨牌,两个多米诺骨牌中间有一排骨牌,一块骨牌倒下需要1s,从第一个关键的骨牌开始翻到,问全部骨牌翻到需要多少时间&&最后一块骨牌的位置思路:求每块关键骨牌翻到的时间(以为源点最小路径),每一条边全部倒下需要时间(d[u]+d[v]+val)/2;注意:1,0->1.0s 1*/#include<iostream>#include<algorithm>#include<cmath>using namespace std;#define INF 1000000 阅读全文
posted @ 2011-10-27 13:30 4.5.6 阅读(154) 评论(0) 推荐(0) 编辑

poj1062昂贵的聘礼

摘要: View Code /*poj1062昂贵的聘礼解法:求一点到其他所有点的最短路径(还要加上终点的pri[]),在一条路径上点与点之间的等级差不能超过n,扫描区间因为每条路径都要经过点1,所以依次扫描区间[ lev[1]-n , leve[1] ]......[ lev[1] , lev[1]+n ]*/#include<iostream>#include<algorithm>#include<cmath>#define MAXN 1000#define INF 100000000int lev[MAXN],pri[MAXN],g[MAXN][MAXN],G 阅读全文
posted @ 2011-10-27 13:28 4.5.6 阅读(163) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 ··· 9 下一页