2011年9月2日

poj-1860 Currency Exchange **

摘要: /* * 汇率问题: Bellman_Ford算法 , 判断正环 * * 有个奇怪的问题: 如果把 d[i]初始化为 -inf 则 WA, 初始化为 0 或 -100 之类的值则AC~ 奇怪 */#include <iostream>#include <cstring>using namespace std;const int maxN = 100 + 5;int n, m, s;double v, r[maxN][maxN], c[maxN][maxN], d[maxN];void ini(){ for(int i=1; i<=n; i++) d[i] = 0; 阅读全文

posted @ 2011-09-02 22:32 龙豆 阅读(323) 评论(0) 推荐(0)

poj-1837 Balance ***

摘要: /* [转] * * d[i][j]表示在挂上前i个物体的时,平衡度为j * (j>0时表示左边重,j=0时表示天平平衡,j<0时表示右边重)时挂法的数量, * 而根据题意可以确定j的取值范围为:[-7500,7500],于是可以得到状态转移方程为: * d[i][j]+=(d[i-1][j-weigh[k]*pos[i]]), * weigh[k]表示第k个挂钩的位置,pos[i]为第i个砝码的重量 * 由于j-weigh[k]*pos[i]可能为负数,因此统一加上7500, * 那么初始状态d[0][7500]=1(此时表示天平平衡),表示不用... 阅读全文

posted @ 2011-09-02 16:32 龙豆 阅读(209) 评论(0) 推荐(0)

poj-1251 Jungle Roads *

摘要: /* * 1251.cpp * 纯粹MST。。 Prim实现 * * Created on: 2011-9-2 * Author: * * 开始用scanf, WA, 后改成cin, AC了~ 不知怎么回事 总之对C的输入输出理解的还不够好~ */#include <cstdio>#include <iostream>usingnamespace std;constint maxN =27+5;constint inf =100000000;int n, w[maxN][maxN], d[maxN], ans;intbase='A'-1;int inli 阅读全文

posted @ 2011-09-02 15:26 龙豆 阅读(296) 评论(0) 推荐(0)

poj-2492 A Bug's Life **

摘要: 与POJ-1703类似。。故先转一个和1703相同解法的代码:————————————————————【转】这道题和poj1182是很类似的,只不过拿那道题目有三个集合,而我们这道只有两个,岂不是更简单!具体做法要在熟悉了并查集这种数据结构的常规操作之后进行扩展。关于并查集请参考《算法导论》,这是一本非常非常出色的算法类参考书,他所讲的不相交集合就是并查集。注意两个概念:按秩合并、路径压缩。1、按秩合并由于并查集一般是用比较高效的树形结构来表示的,按秩合并的目的就是防止产生退化的树(也就是类似链表的树),用一个数组记录各个元素的高度(也有的记录各个元素的孩子的数目,具体看哪种能给解题带来方便) 阅读全文

posted @ 2011-09-02 13:37 龙豆 阅读(749) 评论(0) 推荐(0)

poj-1703 Find them, Catch them ***

摘要: 【转】解析:并查集的题目,并查集的拓展。一般的思路是先初始化,各个数自成一个组,然后是两个gangs自成一个组,但由于两个给定元素有三种关系:Inthe same gang; Indifferent gangs; Notsure yet;采用此模型的缺点是判断两个元素关系还未确定这种情况比较复杂,故模型需要改进。本题的正确模型是将已经确定关系的元素组成一个集合,然后利用两个元素的father是同一个来确定这两个元素之间的关系。father[a]中存放的是a的根结点,rank中存放的是father[a]与a的关系,0表示两者不在同一个gangs中,1表示两者在同一个gangs中。具体的程序还是沿 阅读全文

posted @ 2011-09-02 13:25 龙豆 阅读(2360) 评论(0) 推荐(1)

poj-1258 Agri-Net **

摘要: /* * 纯粹的最短路 prim 用 二叉堆 实现 * * 用二叉堆实现优先级队列 比较麻烦~ 后面附上直接用数组的 * */#include <cstdio>#include <cstring>usingnamespace std;constint maxN =100+5;constint inf =100000000;int n, G[maxN][maxN], len; //len:二叉堆数组的长度int ans;bool S[maxN];int d[maxN], vertex[maxN], reverse[maxN]; //二叉堆中节点的域int inline l 阅读全文

posted @ 2011-09-02 10:26 龙豆 阅读(258) 评论(0) 推荐(0)

poj-2421 Constructing Roads *

摘要: /* * 蛮水的一道MST Kruskal, 链表实现 * * 预处理: * 根据已有的边,把相应的集合合并。。再Kruskal * * 另一种方法: * 把已有边的权值改为0 * */#include <cstdio>#include <algorithm>using namespace std;const int maxN = 100 + 5;int n, totEdgeNum, G[maxN][maxN], q, ans;struct SEdge{ int w, u, v;};SEdge edge[maxN * maxN];struct SNode{ int... 阅读全文

posted @ 2011-09-02 10:16 龙豆 阅读(271) 评论(0) 推荐(0)

导航