2011年9月3日

poj-1087 A Plug for UNIX ***

摘要: /* * 1087.cpp * 第一道最大流题目, 看了网上的解法, * http://www.cppblog.com/NARUTOACM/archive/2010/03/01/108680.html * 见图:其实可以把图中的边的方向全部反过来,就可以这样理解:T是总电源, 单位时间内可以给A、B、C、D提供1度电(ABCD是原来就有的电源插座), 而根据每个设备的插座类型, 相应的插座能给设备提供1度电.。S看做总的消耗功率。。每个设备对总消耗功率的贡献是1.。 至于adapter, 由于每种adapter有无限个, 所以 例如 把 X 变成 B 的adapte... 阅读全文

posted @ 2011-09-03 22:30 龙豆 阅读(1287) 评论(0) 推荐(0)

poj-2049 Finding Nemo *

摘要: 【转】 (看了题目,感觉用广搜, 就没做~ 直接转一个~ )搜索题,我的做法是用优先队列(保证当前所通过的门是最少的),所以遇见出口,就可以直接得到结果,搜索从Nemo的位置开始,有三种情况,遇见门,door加1,入队,遇见air,直接入队,遇见墙,continue;我的存储结构见代码,这里还要注意两点,一是Nemo的位置可能超出[1--199],所以开始时有必要进行判断(因为这,n个runtime error ,郁闷了几个小时。。)二是这个如果用C++提交的话,好像输入Nemo的位置时,必须用cin(不能用scanf,当然G++也可以通过的),这是偶然在discuss上看到的,要不,不知又. 阅读全文

posted @ 2011-09-03 17:06 龙豆 阅读(1151) 评论(0) 推荐(0)

poj-1062 昂贵的聘礼 **

摘要: /* * 最短路, Dijkstra(数组实现) * * 建图 : 若 物品u 能用物品 v 再加 钱 a 交换, 则 边权值w(v,u) = a * 初始: d[i] = 物品i的直接价格 * * 注意等级的限制, 酋长的等级不一定是最高的~ 应枚举等级的范围,起点不在范围内的边不能松弛~ * * */#include <cstdio>#include <cstring>using namespace std;const int inf = 10000000;const int maxN = 100 + 5;int m, n, r[maxN], d[maxN];boo 阅读全文

posted @ 2011-09-03 15:55 龙豆 阅读(338) 评论(0) 推荐(0)

poj-1125 Stockbroker Grapevine *

摘要: /* * 水题~ floyd算法 0ms * * 求每对顶点间的最短路, 然后选择 最大值 最小的那个顶点作为起点~ */#include <cstdio>#include <cstring>using namespace std;const int maxN = 100 + 5;const int inf = 10000000;int n, totEdgeNum, w[maxN][maxN];/*struct SEdge{ int u, v, w;};SEdge edge[maxN * maxN];*/void floyd(){ for(int k=1; k<= 阅读全文

posted @ 2011-09-03 14:18 龙豆 阅读(214) 评论(0) 推荐(0)

poj-3259 Wormholes **

摘要: /* * Bellman_Ford 判断负环 * * 注意可能有平行边,只需保留最小的权值 * * 【转】 * 此题虽然是最最基础的bellman_ford,但用来加深理解还是可以的: * 1)bellman_ford 究竟要relax多少次,当从1到n存在且存在1 -> 2, 2 -> 3 ...n-1 -> n这样的边时, * 从1开始relax,到n显然是需要n-1次的,而如果其中存在负环的话,若relax次数大于n-1,总是存在新的可以收缩的点, * 因此最科学的次数是先做n-1次,再做第n次: * 如果n-1次relax... 阅读全文

posted @ 2011-09-03 11:06 龙豆 阅读(256) 评论(0) 推荐(0)

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)

导航