随笔分类 -  ACM_图论

上一页 1 2

UVA 10801 Lift Hopping
摘要:算是一道需要动脑筋的最短路问题了,关键在于建图部分,对于n个电梯中每一个都要经过cnt个楼层,a[0],a[1],a[2],a[3],a[4],......a[cnt-1],那么对于任意两个楼层a[j],a[l],都需要建立一条a[j]到a[l]的边,以及另一条反向边。而且为了表示所属的电梯,另外用一个数组tag[e]表示边e所属的电梯,当tag[e1]!=tag[e2],应该在时间上加上60s。然后利用dijsktra+优先队列即可。最近感觉做acm题是真真的开始入门了,不过接触到的算法,是在是少,一步一步慢慢学精吧。坚持做到每天独立的切几题,这样的成就感一定能够使得我越走越远。 1 #in 阅读全文

posted @ 2013-09-02 23:42 rootial 阅读(189) 评论(0) 推荐(0) 编辑

UVA 10896 Sending Email
摘要:这个题目真是伤透脑筋了,一直RE,连着改了好几个版本,又是spfa,又是单调队列dijkstra+单调队列,总是不过,后来发现M开小了,双向边应该开m的两倍,悲剧啊!!!以后不管怎样,数组一定要尽量开大点。折磨的真是痛苦,不过发现了一样好东西,http://uvatoolkit.com/problemssolve.phpuva一个测试工具,输入数据能够给出正确结果,以后不用辛苦到网上找AC代码了,直接输入结果。 1 #include 2 #include 3 #include 4 #include 5 #define N 20010 6 #define M 100010 7 #defi... 阅读全文

posted @ 2013-09-02 20:09 rootial 阅读(306) 评论(0) 推荐(0) 编辑

UVA 10048 Audiophobia 任意两点的路径上最大的边
摘要:题目是要求任意给定两点的的路径上最大的边,最终输出这些最大边中最小的值,也就是求一条路径使得这条路径上最大的边在所有连通两点的路径中最短。根据Floyd—Warshall算法改造一下就行了。dp[i][j]表示i,j两点的连通路径中最大边的最小值。 1 #include 2 #include 3 #define N 110 4 #define INF 999999999 5 #define max(a,b) ((a)>(b)?(a):(b)) 6 #define min(a,b) ((a)>(b)?(b):(a)) 7 8 int dp[N][N]; 9 int main(void 阅读全文

posted @ 2013-08-03 14:15 rootial 阅读(280) 评论(0) 推荐(0) 编辑

UVA 10034 Freckles 最小生成树
摘要:虽然是道普通的最小生成树题目,可还是中间出了不少问题,暴露的一个问题是不够细心,不够熟练。所以这篇博客就当记录一下bug吧。代码一:kruskal 1 #include 2 #include 3 #include 4 #include 5 #define N 110 6 7 typedef struct 8 { 9 double x,y; 10 } Point; 11 Point point[N]; 12 13 typedef struct 14 { 15 int u,v; 16 double c; 17 } EDGE; 18 EDGE edge[... 阅读全文

posted @ 2013-08-03 10:59 rootial 阅读(359) 评论(0) 推荐(0) 编辑

CF 33B String Problem
摘要:对每个位置进行操作,求出最终变成相同字母的代价,然后把所有的位上代价加起来,使得总代价最小。res[i][j]表示将字母i+'a'和字母j+'a'变为相同的代价,设最终都变成字母k+'a',那么res[i][j] 2 #include 3 #define N 100010 4 #define M 30 5 #define INF 9999 6 #define min(a,b) ((a)>(b)?(b):(a)) 7 8 int dp[M][M],rec[M][M],res[M][M],vis[M][M]; 9 char s[N],t[N]; 阅读全文

posted @ 2013-07-31 19:37 rootial 阅读(213) 评论(0) 推荐(0) 编辑

HDU 4081 Qin Shi Huang's National Road System
摘要:步骤是先求最小生成树,然后选两个不同的点,遍历所有的这样的点,选出两点人口比较大,而且连通两点的边的最大边比较大的情况。因此要对i,j点连接起来的边进行遍历。 1 #include 2 #include 3 #include 4 #define N 1010 5 #define max(a,b) ((a)>(b)?(a):(b)) 6 #define INF 999999999 7 8 double map[N][N],lowcost[N],cost[N][N]; 9 int vis[N];/*-1表示该点已经加入,非0表示i和vis[i]的值表示的点构成一条短边*/10 int n;1 阅读全文

posted @ 2013-07-30 21:12 rootial 阅读(217) 评论(0) 推荐(0) 编辑

HDU 2487 Ugly window
摘要:这是切的很痛苦的一道题,自己测试了很多样例却终究不过,中间也做了诸多修改,后来无奈去网上看题解,发现遗漏了一种情况,就是两个窗口可能边框都能看见,但是一个嵌套在另一里面,而我判定是不是 “top window”的条件只要是边框全部暴露在外面,所以呢发现边框完整没有遮挡的时候,对边框包围区域遍历一遍看里面有没有字母,这样就能判定一个“top window”了。主要思路就是沿着右下左上的方向行进,遇到不是相同字母或越界的情况就变化方向,如果提前表示方向的d>3,说明边框被遮挡不完整,若完整的话对框内区域进行查找看有没有其他字母。 1 #include 2 #include 3 #includ 阅读全文

posted @ 2013-07-29 22:17 rootial 阅读(214) 评论(0) 推荐(0) 编辑

POJ_2446_Chessboard
摘要:题目意思就是一个M*N的有洞棋盘棋盘上,用1*2的板子去覆盖没有洞的地方,要求板子不能重叠,最终能否将棋盘完整覆盖。代码: 1 #include 2 #include 3 #include 4 #define MAX 35 5 6 struct z 7 { 8 int color; 9 int ct; 10 }; 11 struct z chess[MAX*MAX]; 12 int lc,rc; 13 int m,n;a 14 __int64 hole[MAX*MAX]; 15 __int64 G[MAX*MAX][MAX*MAX]; 16 __int64 ... 阅读全文

posted @ 2013-07-16 20:43 rootial 阅读(652) 评论(0) 推荐(0) 编辑

嵌套矩形
摘要:矩形嵌套时间限制:3000ms | 内存限制:65535KB难度:4描述有n个矩形,每个矩形可以用a,b来描述,表示长和宽。矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅当a 2 #include 3 #include 4 #define N 1100 5 6 int G[N][N]; 7 int n,max; 8 int ans[N]; 9 int d[N];10 typedef struct11 {12 int l,w;13 } s;14 s r[N];15 int f(int);16 17 /*18 void print_ans(int t,int count)19 {20... 阅读全文

posted @ 2013-07-15 23:58 rootial 阅读(1029) 评论(0) 推荐(0) 编辑

上一页 1 2

导航