上一页 1 ··· 6 7 8 9 10 11 12 下一页

2013年4月4日

ICPC archive 6187 并查集

摘要: https://icpcarchive.ecs.baylor.edu因为给你的是两物品的重量差,问你的也是两物品的重量差,所以,如果告诉你两物品的重量差,这就相当于给你一种等价关系,把两物品所在的集合合并,并能推导出合并完的集合内所有的物品的差,为了加速该过程,可以在每个子结点记录自己与父结点的重量差,然后在查找时路径压缩,让结点的父结点直接是根结点,重量差就要更新,这步要做对,自己推导推导怎么做,然后在合并两集合时采用启发式合并,说白了就是把结点数少的那个集合作为结点数多的集合的子结点。这样操作会少一些。贴代码:View Code 1 #include 2 #define MAXN ... 阅读全文

posted @ 2013-04-04 19:41 allh123 阅读(196) 评论(0) 推荐(0) 编辑

2013年4月3日

Fleury 求欧拉回路

摘要: 思想就是有别的选择就不走桥。加一个dfs.看代码自行理解,我也没理解完全。欧拉回路或欧拉通路的判别定理:度为奇数的顶点数目为2或0,为2有欧拉通路,起点和终点就是度为奇数的点,为0有欧拉回路,起点任意。View Code 1 #include <cstdio> 2 #include <cstring> 3 #define MAXN 100 4 bool edge[MAXN][MAXN]; 5 int n; 6 int mystack[MAXN]; 7 int top; 8 void dfs(int x) 9 {10 int i;11 mystack[top++] = x 阅读全文

posted @ 2013-04-03 00:40 allh123 阅读(170) 评论(0) 推荐(0) 编辑

Burn the Linked Camp ZOJ 2770 差分约束系统 SPFA

摘要: 这个题是建立一个差分约束系统的模型,设前i个营的实际总人数为si,则根据题意,可得每个营的人数s[i] - s[i-1] <= c[i], i = 1,2......n他会给m个估计,s[j] - s[i-1] >= k,即s[i-1] - s[j] <= -k.然后还有一个约束就是每个营的人数要大于等于0, 即s[i] - s[i-1] >= 0,也就是说 s[i-1] - s[i] <=0.考虑一个三角形,任意两边只和大于第三边,再加上三条线共线,换种说法:已知一个源点,源点到每个点都有路,整个图连通,有边<u,v>从源点到顶点v的最短路一定< 阅读全文

posted @ 2013-04-03 00:36 allh123 阅读(169) 评论(0) 推荐(0) 编辑

2013年4月2日

Wormholes POJ 3259 SPFA 判断是否出现了负权值回路

摘要: 这个题是判断有没有一条权值为负的回路,用SPFA是OK的,如果某个顶点重复入队列N次,就证明存在负权值回路。如果这个图是一个连通图,那么任意选择一点开始搜都行,但是如果该图不连通,那么我认为从从所有虫洞的起点都搜一遍是个不错的选择。不过是不是我应该默认一个农场嘛,应该会是连通的。。。。。但是我只从顶点1开始判断,也AC了,只是老感觉不严谨,也许是测试数据弱吧希望能用邻接表存,邻接矩阵存的话,复杂度提高了,顶点有500个,边只有2500+200条,算稀疏图了吧如果一定要用邻接矩阵存的话,注意一下重边的情形,选择时间花费最少的应该总是正确答案。贴代码:View Code 1 #include &l 阅读全文

posted @ 2013-04-02 13:14 allh123 阅读(238) 评论(0) 推荐(0) 编辑

2013年4月1日

Silver Cow Party POJ 3268 SPFA

摘要: 这个题我是这么做的,本来想用Floyd写,但是看到n 2 #include 3 #include 4 #define MAXN 1005 5 #define INF 1000000 6 using namespace std; 7 int n; 8 int num[2][MAXN]; 9 int time[2][MAXN];10 bool s[MAXN];11 struct ArcNode12 {13 int v,w;14 } edge[2][MAXN][MAXN];15 void SPFA(int vo,int ser)16 {17 int i,j;18 queu... 阅读全文

posted @ 2013-04-01 20:58 allh123 阅读(116) 评论(0) 推荐(0) 编辑

ZOJ 1092 POJ 2240 Arbitrage Floyd

摘要: 裸的Floyd做,感觉Floyd复杂度还挺高的,有O(n^3),适合顶点少的情形。这里先是求任意两种钱的汇率的最大值,就是一单位这种钱能换多少单位那种钱的最大的换法。在算路径时用乘法不用加法,对角线上的元素为1,自己换自己当然是1,不能换的取值为0,最后对角线上的值大于1了输出yes,否则输出no.贴代码:View Code 1 #include <cstdio> 2 #include <cstring> 3 #define INF 1000000 4 #define MAXN 32 5 double A[MAXN][MAXN]; 6 int n; 7 void Flo 阅读全文

posted @ 2013-04-01 20:46 allh123 阅读(163) 评论(0) 推荐(0) 编辑

ZOJ 3693 Happy Great BG

摘要: 这个题的关键是看清楚题意,我就没看懂题再瞎写,直接n= n+2,n = n-n/k, 这些人是要付钱的,然后,重点来了,在结果上加10^-10才能A,不然就是WA,不明白为什么,求高手解释计算机如何处理浮点数!追加的:这题貌似不是什么浮点数怪,也许只是不要四舍五入,而是直接进1,比如,2.341,就要付2.35元,所以在算得的结果后加一个0.009就能过,但是rounded不是四舍五入吗?????应该是这题出的不太正常贴代码:View Code 1 #include <cstdio> 2 int main() 3 { 4 int n,k; 5 double w; 6 ... 阅读全文

posted @ 2013-04-01 20:38 allh123 阅读(194) 评论(0) 推荐(0) 编辑

Idiomatic Phrases Game zoj 2750 Dijkstra

摘要: 典型的Dijkstra,按题目要求构造出对应的图,找从第一个成语到最后一个成语的最短路,在中间找第一个成语到其他成语的最小用时时没有找到,所有未选中的成语的用时都是INF,那么就输出-1,如果找出的是最后一个成语了,就berak,输出min值。在读用时和成语字符串时,我写了个scanf("%d %s",&num[i],a[i]); 其中char a[MAXN][50],然后WA了,我就改成了 char a[MAXN][100],scanf("%d",&num[i]);scanf("%s",a[i]);然后及AC了。贴代 阅读全文

posted @ 2013-04-01 10:50 allh123 阅读(156) 评论(0) 推荐(0) 编辑

2013年3月31日

Domino Effect ZOJ 1298 POJ 1135 Dijkstra

摘要: 这题WA很久,然后找不出原因,后来看了书上的程序(图论理论算法实现及应用神马的),然后感觉不出来自己哪里错了,后来改了改,把无穷大的定义改小了点,再放到ZOJ上,成功AC了,我都不知道为什么,也许还改了其他地方,我已经糊涂了,然后又把它放POJ 1135上又WA了,我都憔悴了,最后我想起以前刷水题时要把double用%f输出,我试了一下,果然AC了,求解释`````贴代码:View Code 1 #include <cstdio> 2 #include <cstring> 3 #define MAXN 505 4 #define INF 1000000 5 int n; 阅读全文

posted @ 2013-03-31 23:04 allh123 阅读(171) 评论(0) 推荐(0) 编辑

QS Network ZOJ 1586 Prim

摘要: 这个题绝对的Prim,但是这题有个怪一点的地方,他的适配器要重复买,比如顶点A和B连了一条边,顶点B和C连了一条边,那么要买,两个B适配器,一个A和一个C适配器,我先理解错了,以为只要买一个B适配器就可以了,所以连测试数据都过不了。然后可以直接把两个适配器的价格算在这条边的权值上,反正总的要求是造价最低嘛。。。贴代码:View Code 1 #include <cstdio> 2 #define MAXN 1020 3 int n; 4 int sum; 5 int lowcost[MAXN]; 6 int edge[MAXN][MAXN]; 7 void Prim() 8 { 9 阅读全文

posted @ 2013-03-31 21:26 allh123 阅读(156) 评论(0) 推荐(0) 编辑

上一页 1 ··· 6 7 8 9 10 11 12 下一页

导航