04 2011 档案

摘要:素数打表:void oddp(){ int i,j; for(i=0;i<1000000;i++) a[i]=1; a[0]=0; a[1]=0; for(i=2;i<1000000;i++) { if(a[i]==1) { for(j=i*2;j<1000000;j+=i) a[j]=0; } }}结合POJ2262代码:int main(){ int num; int i,flag; oddp(); while(scanf("%d",&num)!=EOF&&num!=0) { for(flag=0,i=2;i<num;i+ 阅读全文
posted @ 2011-04-29 09:59 Veegin 阅读(1731) 评论(1) 推荐(0)
摘要:Silver Cow PartyTime Limit:2000MSMemory Limit:65536KTotal Submissions:5052Accepted:2151DescriptionOne cow from each ofNfarms (1 ≤N≤ 1000) conveniently numbered 1..Nis going to attend the big cow party to be held at farm #X(1 ≤X≤N). A total ofM(1 ≤M≤ 100,000) unidirectional (one-way roads connects pa 阅读全文
posted @ 2011-04-29 09:46 Veegin 阅读(428) 评论(0) 推荐(0)
摘要:从廉政师兄和志权师兄那里学会了最短路径的Dijkstra,Floyd,Bellman-Ford算法和最大匹配算法。思考完模板后,终于找了一道水题POJ1502先来练练Dijkstra算法。 Dijkstra给我的第一感觉跟Prim有点相似。只是更新权值的方式不同,因为要求的是最短路径,所以每个点的消耗都是累计之前相连的点的消耗。以下是小弟POJ1502的代码:#include <stdio.h>#include <stdlib.h>#include <string.h>#define N 120#define MaxInt 0x3f3f3f3fint n,m 阅读全文
posted @ 2011-04-29 09:44 Veegin 阅读(1560) 评论(0) 推荐(0)
摘要:今天刚掌握Kruskal算法,写下随笔。对于稀疏图来说,用Kruskal写最小生成树效率更好,加上并查集,可对其进行优化。Kruskal算法的步骤:1.对所有边进行从小到大的排序。2.每次选一条边(最小的边),如果如果形成环,就不加入(u,v)中,否则加入。那么加入的(u,v)一定是最佳的。并查集:我们可以把每个连通分量看成一个集合,该集合包含了连通分量的所有点。而具体的连通方式无关紧要,好比集合中的元素没有先后顺序之分,只有“属于”与“不属于”的区别。图的所有连通分量可以用若干个不相交集合来表示。而并查集的精妙之处在于用数来表示集合。如果把x的父结点保存在p[x]中(如果没有父亲,p[x]= 阅读全文
posted @ 2011-04-29 09:37 Veegin 阅读(12513) 评论(3) 推荐(3)
摘要:今天从志权师兄那里学会了最小生成树。所谓生成树,就是n个点之间连成n-1条边的图形。而最小生成树,就是权值(两点间直线的值)之和的最小值。首先,要用二维数组记录点和权值。如上图所示无向图:int map[7][7]; map[1][2]=map[2][1]=4; map[1][3]=map[3][1]=2; ......然后再求最小生成树。具体方法是:1.先选取一个点作起始点,然后选择它邻近的权值最小的点(如果有多个与其相连的相同最小权值的点,随便选取一个)。如1作为起点。visited[1]=1;pos=1;//用low[]数组不断刷新最小权值,low[i](0<i<=点数)的值 阅读全文
posted @ 2011-04-29 08:42 Veegin 阅读(87387) 评论(19) 推荐(10)