05 2013 档案
poj 1861 Network 最小生成树 kruscal算法
摘要:链接:http://poj.org/problem?id=1861题意:给n个路由器,注意标号为1到n,m表示这n个路由器之间的连接关系数,要连接这些路由器,且必须保证最长的单根网线的长度是所有方案中最小的。输出连接方案中最长网线的长度和所用网线的根数以及每根网线所连路由器的编号。思路:没有直接要求求最小生成树,可以知道,所选网线条数必是n-1。另外,可以证明,对于一个图的最小生成树来说,它的最大边满足在所有生成树的最大边里最小。由于kruscal算法是先选长度较小的边,所以长度最大的边必然是最后选定的一条边。还有,poj和zoj上的这道题Sample Output有错误。#include#i 阅读全文
posted @ 2013-05-31 22:31 ∑求和 阅读(262) 评论(0) 推荐(0)
zoj 1203 最小生成树—kruscal算法
摘要:链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1203题意:给出n个城市的坐标,计算连接这n个城市所需路线总长度的最小值。思路:先求出每两个城市间的距离,也就是边权,然后用kruscal来求最小生成树,得出最小值。注意输出格式,要求每两个输出之间要有一个空行。但是最后的一个输出后面不能有空行,所以判断是不是第一个输出,不是的话,先打一个空行。一开始写wa了,找了很久错误没找出来,后面发现是cmp()函数写的有问题。一开始我是直接把上次写的kruscal()示例程序中的cmp()函数粘贴了过来。没想问题,结果,呵呵 阅读全文
posted @ 2013-05-31 12:59 ∑求和 阅读(236) 评论(0) 推荐(0)
拓扑排序示例程序
摘要:#include#include#include#include#include#include#includeusing namespace std;const int maxn=10;struct ArcNode{ int to; struct ArcNode *next;};int n,m;//顶点个数,边数ArcNode* List[maxn];//各顶点边链表的表头指针int count[maxn];//各顶点入度char output[100];//输出内容void TopSort(){ int top=-1; ArcNode* temp; bool ... 阅读全文
posted @ 2013-05-30 21:34 ∑求和 阅读(202) 评论(0) 推荐(0)
Kruscal示例程序
摘要:其中n和m分别表示图的顶点数和边数。#include#include#include#include#include#include#include#includeusing namespace std;const int maxn=11;const int maxm=20;int n,m;struct Edge{ int u,v,w;} edges[maxm];class set{public: void makeset(int n) { for(int i=0; irank[y]) { father[y]=x; ... 阅读全文
posted @ 2013-05-30 21:25 ∑求和 阅读(169) 评论(0) 推荐(0)
取名无力
摘要:好久都没有刷题了,好久都没有写博客了。面壁反思一下。明天体育考试完后就会有时间了,健美操,终于可以和你说拜拜。真是人生一大幸事啊。再然后,过个十多天又要期末考,得开始复习,忧伤。随机过程真的是完全都不懂得状况,其他的几门也是勉勉强强。不能把acm作为成绩烂的理由,更何况,acm也没搞出什么名堂来。这点才是最最伤心。现在又到了怎么睡都睡不饱的状态了,就想躺床上挺尸。今天早上6点钟被热醒了,这长沙该死的天气。想当初,高考填志愿的时候,我信誓旦旦不报长沙的学校,主要是因为天气原因。结果,诶,命中注定啊。等下又要去跳操,还有英语作文。哎。。。 阅读全文
posted @ 2013-05-29 20:05 ∑求和 阅读(170) 评论(0) 推荐(0)
poj 2243 简单bfs
摘要:链接:http://poj.org/problem?id=2243题意:给定棋盘上的两个位置a,b,计算马从a跳到b最少需要多少步。思路:要注意象棋中是马走日。然后就用bfs求最小步数。#include#include#include#include#include#include#include#includeusing namespace std;int flag[9][9];map m;int sx,sy,ex,ey,mins;int dir[8][2]={{2,1},{1,2},{-1,2},{-2,1},{-2,-1},{-1,-2},{1,-2},{2,-1}};struct po 阅读全文
posted @ 2013-05-21 20:36 ∑求和 阅读(208) 评论(0) 推荐(0)
poj 1465 bfs,余数判重
摘要:链接:http://poj.org/problem?id=1465题意:给一个数N,再给M个数,x1,x2....xm,求N的最小倍数,满足最小倍数的各个数字都在x1,x2....xm中。思路:不会做,没想法,完全想不到用宽搜来做。好神奇啊。。。于是参考了人家的。参考链接:http://blog.csdn.net/oceanlight/article/details/7871108 http://blog.csdn.net/hqd_acm/article/details/6278647代码就算了,反正也不是自己写的。 阅读全文
posted @ 2013-05-21 16:31 ∑求和 阅读(116) 评论(0) 推荐(0)
无话可说
该文被密码保护。
posted @ 2013-05-19 16:46 ∑求和 阅读(14) 评论(0) 推荐(0)
Snake & Ladders bfs
摘要:链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=555题意:一个n*n格的棋盘,从1标号到n*n。从1开始走,每次投色子,可走1到6步中的任意一个步数,问最少投几次色子可到最后一格。其中有两种特殊通道,蛇和梯子,在蛇头所在的格子可以直接走到蛇尾所在的格子,在梯子底端所在的格子可以直接走到梯子顶端所在的格子。思路:由于蛇和梯子作用是一样的,所以可以把它们看成一种。又由于蛇和梯子是不会重合的,所以它们不可能在同一 阅读全文
posted @ 2013-05-16 20:05 ∑求和 阅读(194) 评论(0) 推荐(0)
zoj 1649 bfs
摘要:链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=649题意:有N行,M列的格子,从”r”出发,要到达“a”处,”#”不能走,走”x"要多用一个单位时间,“."用正常的单位时间。求最短时间。思路:由于要求的是最短的时间,所以用广搜,但是最一般的广搜求出来的是最少的步数,此题要求的是最少的时间。在这个问题中,最少的步数并不代表时间也是最少的,因为可能会有很多的”x“出现,这样时间就长了。用一个结构体来表示当前位置的状态,包括走过的步数和所用的时间。数组mintime[x][y]表示走到(x,y)所花的最 阅读全文
posted @ 2013-05-15 19:24 ∑求和 阅读(153) 评论(0) 推荐(0)
zoj 2165 dfs
摘要:链接:http://acm.zju.edu.cn/onlinejudge/showContestProblem.do?problemId=4998题意:就是人朝四个方向移动,只能走黑色瓷砖,红色瓷砖不能走,求人能走多少块瓷砖。思路:W表示列数,H表示行数,一开始没注意,拿W当行数了,结果很郁闷。以后审题能不能仔细点!方法就是直接搜,从起点开始,遇到红瓷砖,超过边界的或者已经搜过的就不搜了,符合条件的瓷砖就cnt++,比较简单,不用清理现场。#include#include#include#includeusing namespace std;const int maxn=22;char gri 阅读全文
posted @ 2013-05-14 17:14 ∑求和 阅读(183) 评论(0) 推荐(0)
zoj 2412 dfs
摘要:链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2412题意:有11种不同的水管,如果它们能连通,则可以流水,求一块地上连通水管数。思路:这题主要是先要把不同的水管表示出来,一开始觉得要表示出来很麻烦,后面去看了别人写的。地有四个方向,某个方向上有水管则为1,没有为0,这样就表示出来了。然后在搜索过程中,如果当前的地在某个方向i上有水管,则看相邻的地在对应的方向(i+2)%4上有无水管,有的话继续搜下去,没有就不搜咯。其他部分和zoj的1709差不多,用一个visited数组来记录某块地有没有被搜过,0为没被搜,1 阅读全文
posted @ 2013-05-14 11:23 ∑求和 阅读(200) 评论(0) 推荐(0)
zoj 1709 dfs
摘要:链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1709题意:*代表地里没有油,@代表地里有油。某块地如果在它的相邻八个方向上的地里也有油,那么它们是属于同一块油田,求油田数。思路:从某个有油的田开始搜,搜过了就标记为*,以免后面再搜,然后统计。#include#includeusing namespace std;int m,n;const int maxn=102;char grid[maxn][maxn];int dir[8][2]={{-1,-1},{-1,0},{-1,1},{0,1},{1,1},{1, 阅读全文
posted @ 2013-05-14 11:10 ∑求和 阅读(147) 评论(0) 推荐(0)
zoj 2110 dfs,剪枝
摘要:链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1110题意:从起点走到目的地,不能回退到走过的格子,S表示起点,D表示终点,X表示墙,’ . ’表示空格,求在规定时间t内,能否到达终点。n,m表示迷宫的长和宽。思路:dfs,从起点开始搜,每个格子有四个方向,一个一个地搜。每搜一个格子,就要把格子设为X,因为不能走重复的格子,遇到墙壁或者边界就走不动,走不动就回退,要把格子恢复为‘ . ’,回到上一步的情况。如果某个位置满足条件,就停止搜索。如果全部分支都搜索完了还找不到解,就无解。其中有两处剪枝,一处是在主函数中,如 阅读全文
posted @ 2013-05-11 11:53 ∑求和 阅读(180) 评论(0) 推荐(0)
poj 2398 点在多边形内
摘要:链接:http://poj.org/problem?id=2398题意:题意和2318差不多,最后要求球数相同的盒子数。思路:输入的隔板不是按顺序的,所以先对隔板进行排序,最后统计。#include//#include#include#include#includeusing namespace std;const int maxn=1000+5;int n,m,x1,y1,x2,y2;struct Line{ int upp,low;} line[maxn];int cmp(Line l1,Line l2){ //return l2.upp-l1.upp; if(l1.up... 阅读全文
posted @ 2013-05-10 09:49 ∑求和 阅读(171) 评论(0) 推荐(0)
poj 2318 判断点在多边形内
摘要:链接:http://poj.org/problem?id=2398题意:有n个隔板,形成n+1个格子,求每个格子中的玩具数。思路:对于每个玩具,二分求它在哪个格子。用叉积判断点是在直线的左边还是右边。#include//#include#include#includeusing namespace std;const int maxn=5000+5;int n,m,x1,y1,x2,y2;struct Line{ int upp,low;}line[maxn];int toy[maxn];int isleft(int x,int y,Line l){ if(x<l.low+(y-y... 阅读全文
posted @ 2013-05-10 09:39 ∑求和 阅读(153) 评论(0) 推荐(0)
邻接表表示
摘要:#includde#include#includeusing namespace std;const int manx=100;struct ArcNode//边结点{ int adjvex;//有向边的另一个邻接点的序号 ArcNode *nextarc;//指向下一个边结点的指针};struct VNode//顶点{ int data;//顶点信息 ArcNode *head1;//出边表表头指针 ArcNode *head2;//入边表表头指针};struct LGraph//图的邻接表存储结构{ VNode vertexs[maxn];//顶点数组 ... 阅读全文
posted @ 2013-05-10 00:04 ∑求和 阅读(218) 评论(0) 推荐(0)
zoj 3702 Gibonacci number 找规律
摘要:链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3702题意:一个数列,第一项为1,给出其第i项的值,问是否满足斐波那契数列的性质。思路:可以发现,如果存在这样一个新数列,那么这个数列和原斐波那契数列对应的差值是原数列的倍数。#include#define LL long longint main(){ LL f[25]; f[0]=f[1]=1; for(int k=2;k<=20;k++) f[k]=f[k-1]+f[k-2]; int t,i,gi,j; scanf... 阅读全文
posted @ 2013-05-09 19:34 ∑求和 阅读(275) 评论(0) 推荐(0)
poj 1654 多边形面积
摘要:链接:http://poj.org/problem?id=1654题意:求多边形面积。思路:题目较为简单,得到多边形的顶点,然后求面积。#include#include#includeusing namespace std;const int maxn=1000000+5;char s[maxn];struct Point{ int x,y;}p[maxn];int Cross(Point a,Point b){ return a.x*b.y-b.x*a.y;}int main(){ int t,len; long long area; scanf("%d",&t. 阅读全文
posted @ 2013-05-09 18:49 ∑求和 阅读(160) 评论(0) 推荐(0)
zoj 3696 Alien's Organ 概率,泊松分布
摘要:链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3696题意:外星人一直随机产生器官,每天产生的器官数量的平均值为r,求一天产生的器官数量小于等于N的概率。思路:因为它是一直连续产生器官的,符合poisson分布,所以套用公式即可。#include#include#includeusing namespace std;double factrial(int n)//血淋淋的教训啊,一定要用double,long long也不行{ if(n==0) return 1; else return n*fact... 阅读全文
posted @ 2013-05-08 00:17 ∑求和 阅读(513) 评论(0) 推荐(0)
poj 1269 直线相交情况
摘要:链接:http://poj.org/problem?id=1269题意:给两条直线,判断它们是重合、平行还是相交,相交则求交点。#include#include#include#includeusing namespace std;const double eps=1e-8;struct Point{ double x,y; Point(double x=0,double y=0):x(x),y(y) {}} p[4];typedef Point Vector;Vector operator + (Vector A,Vector B){ return Vector(A.x+B... 阅读全文
posted @ 2013-05-07 10:31 ∑求和 阅读(216) 评论(0) 推荐(0)
poj 3304 Segments 线段与直线相交的判断
摘要:链接:http://poj.org/problem?id=3304题目大意:给n条线段,求是否存在一条直线,使得各条线段在直线上的投影有公共点。思路:转化为判断是否存在过所有线段的直线的问题。假如存在这样一条直线,则做它的一条垂线,那么垂足就是各线段投影的公共点,垂线即为所求直线。当直线存在的情况下,平移或者旋转直线,它能过线段中所有端点中的某两个,所以枚举线段端点得到目标直线,再判断它是否与所有的线段相交,用叉积判断。还要注意去除重点。#include#includeusing namespace std;const int maxn=100+5;const double eps=1e-8; 阅读全文
posted @ 2013-05-04 16:45 ∑求和 阅读(254) 评论(0) 推荐(0)