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

2013年8月3日

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 阅读(285) 评论(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 阅读(368) 评论(0) 推荐(0)

2013年7月31日

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 阅读(223) 评论(0) 推荐(0)

2013年7月30日

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 阅读(224) 评论(0) 推荐(0)

POJ 2075 Tangled in Cables 最小生成树

摘要: 简单的最小生成树,不过中间却弄了很久,究其原因,主要是第一次做生成树,很多细节不够熟练,find()函数的循环for判断条件是 pre[i]>=0,也就是遇到pre[i]==-1时停止,i就是并查集的代表元、 1 #include 2 #include 3 #include 4 #include 5 #define MAXN 1000 6 #define MAXE 1000010 7 #define LEN 25 8 #define esp 1e-9 9 10 char name[MAXN][LEN]; 11 int n,m; 12 13 typedef struct 1... 阅读全文

posted @ 2013-07-30 00:20 rootial 阅读(223) 评论(0) 推荐(0)

2013年7月29日

HDU 2487 Ugly window

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

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

2013年7月28日

UVA 11426 GCD Extrme (Ⅲ)

摘要: 给定一个整数N(1 2 #define N 4000010 3 #define M 4000000 4 5 int phi[N]; 6 typedef long long ll; 7 ll a[N]; 8 9 void solve(void)10 {11 int i,j;12 for(i=2;i<=M;i++)13 {14 if(phi[i]==i)//phi[i]为i表示该数的欧拉函数值还没有求过,也就是该数为素数。15 {16 for(j=i;j<=M;j+=i)//筛法求欧拉函数值,17 ... 阅读全文

posted @ 2013-07-28 16:18 rootial 阅读(222) 评论(0) 推荐(0)

2013年7月27日

POJ_1220_Nmber Sequence

摘要: 上网查了一下进制转换的算法,发现一个性能比较好的:m进制转换成n进制,先用例如62进制ABC转换成10进制,就是用余位c(第一个数余位数值为0)乘以原基数from,加上A表示的数值,然后得到一个数,对to(要转换的进制)取商替换字符A,注意要用相应字符替换相应位这里是s[0],然后取模作为计算下位时的余位,当计算到最后一位时把余位存起来,因为这就是要准换成的数字的第一位,最后逆序输出就行。最终直到s字符串所有位都是0,反复操作过程中可以改变遍历的下限也就是从第一个不为0的地方开始乘基数取模。代码: 1 #include 2 #include 3 #define N 10010 4 5 cha. 阅读全文

posted @ 2013-07-27 00:28 rootial 阅读(165) 评论(0) 推荐(0)

2013年7月23日

Fibonacci数列对任何数取模都是一个周期数列

摘要: 题目是要求出斐波那契数列n项对一个正整数取模,那么可以把斐波那契数列取模后得到的数列周期求出来。比如下面一个题目:求出f[n]的后4位,先求出数列对10000取模的周期,然后再查找即可。 1 #include 2 #define N 15000 3 #define MOD 10000 4 int a[N]; 5 int main(void) 6 { 7 int i,n; 8 a[0]=0; 9 a[1]=1;10 for(i=2;i#define MOD 10000void AN(int a[][2],int b[][2]){ int a1,a2,a3,a... 阅读全文

posted @ 2013-07-23 13:32 rootial 阅读(777) 评论(0) 推荐(0)

POJ_3321_APPLE_TREE

摘要: poj上面的一道求子树上苹果的题目,网上看了很多题解,下面我来回忆一下,基本来源于大神的微博,http://blog.csdn.net/zhang20072844,我来做个搬运工。先将树的n条边上节点重新标号,让每一棵子树上的节点编号构成一个连续的区间,然后利用dfs将第i个节点表示的区间下限,上限存进数组low[u],high[u]。树状数组c[i]=a[i-2^k+1]+a[i-2^k+2]+.....a[i],也就是i-2^k+1到i之间的苹果总数,每一个a[i]表示树上一个分叉,i是经过重新标号后的表示节点的值。可以通过add(low[i],1)为第i(原苹果树中标号)个节点增加一个苹 阅读全文

posted @ 2013-07-23 00:11 rootial 阅读(201) 评论(0) 推荐(0)

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

导航