2013年10月17日

QS Network

摘要: zoj1586:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1586题目大意:最小生成树,不只算两点之间的费用,还要算点的费用,并不是个点只算一次费用,而是每出现一次算一次。题解:其实只需要在算距离时,把两点的距离加入其中在排序就行了。 1 #include 2 #include 3 #include 4 #include 5 #define INF 100000000 6 using namespace std; 7 int n,cas; 8 int g[1002][1002]; 9 int lowcost[100 阅读全文

posted @ 2013-10-17 12:39 天依蓝 阅读(276) 评论(0) 推荐(0) 编辑

2013年10月16日

Building a Space Station

摘要: poj2031:http://poj.org/problem?id=2031题意:就是给出三维坐标系上的一些球的球心坐标和其半径,搭建通路,使得他们能够相互连通。如果两个球有重叠的部分则算为已连通,无需再搭桥。求搭建通路的最小费用(费用就是边权,就是两个球面之间的距离)。题解:其实就是图论的最小生成树问题球心坐标和半径是用来求 两点之间的边权 的,求出边权后,把球看做点,用邻接矩阵存储这个无向图,再求最小生成树,非常简单的水题把球A和球B看做无向图图的两个结点,那么边权 = AB球面距离 = A球心到B球心的距离 – A球半径 – B球半径 .注意若边权 2 #include 3 #inclu 阅读全文

posted @ 2013-10-16 16:58 天依蓝 阅读(118) 评论(0) 推荐(0) 编辑

Constructing Roads

摘要: poj2421:http://poj.org/problem?id=2421题意:这一题也是最小生成树,不过它要求修的路在下面还有一行是已经修的路所以将其权值赋值为零。题目给的数值的意思是每个点离其他点的距离 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 int n,q,num,pa[102],cnt,sum; 8 int g[101][101],a,b; 9 struct Node{10 int u;11 int v;12 int w;13 boo... 阅读全文

posted @ 2013-10-16 16:53 天依蓝 阅读(145) 评论(0) 推荐(0) 编辑

Networking

摘要: poj1287:http://poj.org/problem?id=1287题意:平面上有许多点,又有许多边。每条边有一定的长度,且只会连接两个不同的点。现需要从这些边中选择某些边,使得尽可能多的点直接或间接相连。同时,又要选取的边的总长度最小。题解:本题就是去除重边,然后kruska运用。去重时候,我采用一个二维数组选取最小的边放进数组,然后遍历数组,如果有边则struct存入要处理的边。但是,看了别人的看法;程中可无视重边,因为排序之后,每次总是把最小的边加入,而且没两个点只能加一次,所以可以无视。 1 #include 2 #include 3 #include 4 #include 5 阅读全文

posted @ 2013-10-16 12:57 天依蓝 阅读(197) 评论(0) 推荐(0) 编辑

2013年10月15日

Jungle Roads

摘要: poj1251:http://poj.org/problem?id=1251题意:求n个村庄之间的最小生成树。题解:建好图,然后之间kruska直接解题。 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 int n,num,k,cnt,sum,tt,next1; 7 char s1,s2; 8 int pa[28]; 9 struct Node{10 int u;11 int v;12 int w;13 bool operator=0;s=pa[s]);24 whi... 阅读全文

posted @ 2013-10-15 21:48 天依蓝 阅读(174) 评论(0) 推荐(0) 编辑

Network

摘要: poj1861:http://poj.org/problem?id=1861题意::求一个最小生成树,边和边权都给出了,只是输出,要求输出最大权值的边的权值,边的条数以及都是什么边 题解:直接用kruska,求最小生成树,最大边,为最后加入的边。边数为n-1;然后依次输出生成树。 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 const int MAXN=1002; 8 int n,m,num,pa[MAXN],top,counts[15003];//分别标记点数,边数,等 9 . 阅读全文

posted @ 2013-10-15 20:50 天依蓝 阅读(208) 评论(0) 推荐(0) 编辑

Swordfish

摘要: zoj1203:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1203题意:给定平面上N个城市的位置,计算连接这N个城市所需线路长度总和的最小值题解:每两个点之间建一条边,然后求这一棵最小生成树。 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 int n,pa[102],cnt,num;//分别记录点的个数 ,并查集,边的个数,以及处理的边的个数 8 struct Node{ 9 double ... 阅读全文

posted @ 2013-10-15 16:33 天依蓝 阅读(214) 评论(0) 推荐(0) 编辑

2013年10月13日

Oil Deposits

摘要: hdu1241:http://acm.hdu.edu.cn/showproblem.php?pid=1241题意:就是找出有多少块有石油的区域,就是数组中的@,这边相邻指的是是周围的八个位置。题解: dfs,从一块油田的位子开始,朝着与他相邻的8个方向收索,遇到油田就把它变成不是油田,并往下继续。遍历一下,就知道有多少了 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 char map[102][102]; 7 int m,n; 8 void dfs(int i,int j){ 9 if(im|... 阅读全文

posted @ 2013-10-13 11:51 天依蓝 阅读(159) 评论(0) 推荐(0) 编辑

Tempter of the Bone

摘要: hdu1010:http://acm.hdu.edu.cn/showproblem.php?pid=1010题意: 输入一个n*m的迷宫,和一个T:可以在迷宫中生存的最大时间。S为起点,D为终点。并且,每个格子只能踩一次,且只能维持一秒,然后该块地板就会塌陷。所以你必须每秒走一步,且到D点时,所用时间为T。用深搜。解题思路: 用深收,但是直接用深收会超时的,必须加上剪枝这里要用奇偶剪枝的方式,减少收索次数。 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 char map[8][8]; //记录原来的地图 阅读全文

posted @ 2013-10-13 11:49 天依蓝 阅读(169) 评论(0) 推荐(0) 编辑

Gnome Tetravex

摘要: zoj1008:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1008题目意思是有一个游戏,即给出一个图,该图是由n*n个小正方形组成,每个小正方形又由4个三角形组成,要求用这n*n个小正方形拼成一个图,该图的每个小正方形的相邻的三角形的中间的数是相同的题解:dfs从左到右边,从上到下,一个一个放,并且进行判断,是否合理,如果合理就放置,反之则回溯。 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 int map[26][4]; 阅读全文

posted @ 2013-10-13 11:47 天依蓝 阅读(291) 评论(0) 推荐(0) 编辑

导航