ACM
文章平均质量分 65
Peanuts_D
女人最大的精彩就是独立
展开
-
HDOJ 1874 畅通工程续
说点实在的以前很少写图论的,所以这两天都比较实在的复习呢,基础重要着啊,不然以后写复杂的图论了那还不得急死人。dijkstra,总结一个图论经常需要注意的地方,就是在输入边的时候有可能多次输入i->j的边,我们做最短路径的时候选取最小的边。代码:#includeusing namespace std;const int INF=0x7fffffff;int dist[205],map原创 2012-07-23 16:18:05 · 676 阅读 · 0 评论 -
POJ 1679 The Unique MST
这是一个次小生成树的题目,我们知道要求最小生成树的方法,次小生成树在最小生成树的基础上运算就可以了,这里采用最简单的方法就是去掉最小生成树集合当中的每一条边再做kruskal,每次kruskla的时间复杂度有mlogm+m,进行最小生成树中边集的枚举复杂度为(n-1)*(m*logm+m),这题还是做到的,还有一种更好的方法,只要做一次kruskal就好了,实现起来有点复杂。先贴本题的代码:原创 2012-07-18 10:00:36 · 630 阅读 · 0 评论 -
HDOJ 2192 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活
一个多重背包的问题,如果还不了解多重背包,建议看背包九讲http://love-oriented.com/pack/#sec5,当然要深刻理解0/1背包和完全背包之后看多重背包就很简单。代码:#includeusing namespace std;int dp[105],v,n[105],vl[105],ct[105];void ZeroOnePack(int cost,int va原创 2012-07-21 09:36:31 · 2622 阅读 · 0 评论 -
HDOJ 2159 FATE
二维背包,既有耐性度限制又有怪兽的个数的限制,每种怪兽是无限多个就说明是二维的无限背包。关于背包问题建议参考背包九讲http://love-oriented.com/pack/P05.html代码:#includeusing namespace std;int a[105],b[105],dp[105][105];int main(){ int n,m,k,s,i,j,l;原创 2012-07-24 10:21:50 · 561 阅读 · 0 评论 -
POJ 1102 LC-Display
最近这个题特别手欢迎,学长说会编程语言的都会写这个题,于是我想看看我会不会。还是会的,不过上次的变形题似乎难些,待会也写了。我是按7个结构来写的。就是8所拥有的7个部分。想来这样写还是有点复杂。不过中间那些for循环直接赋值的,没什么好思考的,还是特简单的。代码:#includeusing namespace std;char map[300][300];void Display原创 2012-08-01 15:25:57 · 1381 阅读 · 0 评论 -
HDOJ 3335 Divisibility
题意:给n个数,从中取最多的数使两两之间不能整除。二分图的最大独立集,在集合中取最多的点使这些点两两之间没有边。听这个定义就应该知道怎么做了,最大独立集=n-最大匹配。边就代表整除关系。代码:#include#includeusing namespace std;#define maxn 1005int map[maxn][maxn],match[maxn],n;__in原创 2012-08-24 09:54:07 · 923 阅读 · 0 评论 -
POJ 1419 Granph Coloring
早就听说这是图的独立集问题,可是杨大哥的DFS提醒我还是这样做靠谱,那个算法没学过。只有黑色的结点被枚举了两次,所以算不了2的次方的复杂度。代码:#include#includeusing namespace std;bool col[105],map[101][101],a[105];int n,ans;bool ok(int i){ for(int j=1原创 2012-09-03 15:35:15 · 844 阅读 · 0 评论 -
POJ 2635 The Embarrassed Cryptographer
先找出10^6之内的素数打表,然后用每个数组的一个单位代表1000进制,这种思想是我在学大数除法的时候学到。这里选用一千进制是因为l有10^6,取模如果再乘以下一位数的时候正好最大为10^9不会超int型。代码:#include#include #define maxn 1000000int num[40],s,f[1000005],p[100005],plen,len;using原创 2012-09-10 21:25:57 · 728 阅读 · 0 评论 -
POJ 2914 Minimum Cut 最小割
最小割Stoer_Wagner算法,网上到处都有这个算法的步骤,实现起来也比较简单。刚刚才理解最小割就是最大流,之所以不用最大流算法,是因为最大流算法有确定的源点和汇点,但是求最小割没有指明源点和汇点;如果枚举每个源点和汇点加上最大流的算法时间复杂度太高O(n^4),用这个算法时间复杂度在O(n^3)。给个链接介绍给大家:http://www.cnblogs.com/ylfdrib/arc原创 2012-09-24 17:19:45 · 1518 阅读 · 0 评论 -
HDOJ 1869 六度分离
就是两两之间的路径不超过7.因为隔六个人,就是七条边,用Floyd。代码:#includeusing namespace std;int n,dist[105][105];void Floyd(){ int i,j,k,temp; for( k=0; k<n; k++) for( i=0; i<n; i++) for( j=0; j<n原创 2012-07-23 17:25:23 · 587 阅读 · 0 评论 -
POJ 1459 Power Network 最大流
这道题的题意很难懂啊:有n个站点,nc个消费站点,np个 发电站,中间还有一些站点只传送不消耗也不发电。m条电缆。每条电缆上有最大的载电容量,求最大的消耗量。这是个多源点多汇点的题目,所以要构造一个虚拟的源点连接所有发电站,虚拟汇点连接所有消费站点。我都不知道什么好了,EK的话呢331ms.Dinic要1000多ms.有可能自己的代码太差了把。EK代码:#include#incl原创 2012-08-02 18:12:45 · 724 阅读 · 0 评论 -
POJ 2488 A Knight's Journey
题意:给一个p*q的棋盘,问你能不能遍历整个棋盘的每一个方格,如果能输出路径,不能则impossible. 简单的深度遍历,得看看0msAC的有什么不同,这个是32ms,在输出时注意先输出列再输出行,例用大写字母表示结果按字典序排序,所有在遍历的时候先要从列小的开始。代码:#includeusing namespace std;int d[8][2]={{-1,-2},{1,-2},原创 2012-08-03 10:15:47 · 986 阅读 · 0 评论 -
POJ 3414 Pots
这个题目可有意思了,小时候我爸爸也经常会出这样的考我。题意:给你两个容量为a,b的容器,分别有几种操作,分别是:将a倒掉,将b倒掉,将a加满,将b加满,将a倒入b,将b倒入a,六种操作,只要有一个达到c就完成了,求最少的步数,并输出过程。就是一个模拟的过程,然后用广搜需找最少步数,我写的好懂但有点长。代码:#include#include#includeusing namespace原创 2012-08-16 10:51:59 · 758 阅读 · 0 评论 -
POJ 1511 Invitation Cards
一道很简单的图论题。题目意思很简单:有n个公交车站,同时有n个同学,要派每个同学到n个站去发邀请涵,所有同学都是在起点CSS坐公交去自己的站点,但是公交车是单向行驶的,到了晚上所有的同学都要坐公交回到起点CSS。问最小的费用是多少。这题一眼就可以看出是最短路问题,题目保证图相互连通的。建图很简单,单向边,建一个正向图,建一个反向图,两次从源点1进行一次SPFA。我原来超时了两次,让我知道c语言输入原创 2012-08-21 18:33:18 · 709 阅读 · 0 评论 -
POJ 1325 Machine Schedule
题意:有两台机器A和B以及N个需要运行的任务。每台机器有M种不同的模式,而每个任务都恰好在一台机器上运行。如果它在机器A上运行,则机器A需要设置为模式xi,如果它在机器B上运行,则机器A需要设置为模式yi。每台机器上的任务可以按照任意顺序执行,但是每台机器每转换一次模式需要重启一次。请合理为每个任务安排一台机器并合理安排顺序,使得机器重启次数尽量少。初始时是模式0. 二分图的最原创 2012-07-05 22:21:34 · 555 阅读 · 0 评论 -
HDOJ 1086 You can Solve a Geometry Problem too
这道题还是比较简单的计算几何题目,原来wrong了很多次原因在于不知道^(抑或)的优先级比==要低。在我看别人的代码的时候,发现大家都没有判断一种垂直但不相交的情况,但也能过,可能数据太弱。大家要是对计算几何的基础知识还不够了解,推荐博客http://dev.gameres.com/Program/Abstract/Geometry.htm。这里先贴自己的代码,也许比较长,但自己认为很保险的。原创 2012-07-10 20:54:58 · 693 阅读 · 0 评论 -
HDOJ 1166 敌兵布阵
今天刚刚学了线段树,原来还有点不理解,毕竟数据结构中的树并没有经常涉及数组,虽然有讲,但已经忘得差不多了。这是我第一个线段树的题目,也是蒋雄学长讲课之后才接触,去了zzy学长的博客,感觉懂了它用数组构造树,和查询的整个过程 所以对我来说,这道题很好入门的题。#includeusing namespace std;#define MAXN 50005int cnt[M原创 2012-07-12 21:32:23 · 1063 阅读 · 0 评论 -
HDOJ 1754 I Hate It
单个值的更新用线段树来做已经是第二个了,这个和上一个HDOJ 1166几乎一模一样,就是原来是求区间和,这里是求区间最大值,将累加的操作换成取最大值的操作即可。单值的更新是初步,慢慢来把,下面还有区间的更新。努力努力代码:#include#includeusing namespace std;#define MAXN 800005int num[MAXN];void Buil原创 2012-07-13 10:17:40 · 712 阅读 · 0 评论 -
HDOJ 1558 Segment set
这是一道比较简单的计算几何加上并查集的题目,我很少做计算几何的题目,这道题还是Wrong了三次,主要是因为没看见题目中的每个test case之间应该有一个空行,最后一个case没有空行。这题主要先判断画的线段是否相交,相交则相并到一个集合。代码:#include#include#includeusing namespace std;#define exp 1e-6struct原创 2012-07-12 11:21:22 · 1043 阅读 · 2 评论 -
POJ 2001 Shortest Prefixes
给你很多单词求前缀或者求某个前缀出现的次数,很容易想到字典树,这道题一眼就能看出来是字典树。所以也就是模版。#includeusing namespace std;struct node{ int cnt; node*next[26]; node() { cnt=0; for(原创 2012-07-11 16:27:01 · 501 阅读 · 0 评论 -
一位ACM过来人的心得
刻苦的训练我打算最后稍微提一下。主要说后者:什么是有效地训练?我想说下我的理解。很多ACMer入门的时候,都被告知:要多做题,做个500多道就变牛了。其实,这既不是充分条件、也不会是必要条件。我觉得一般情况下,对于我们普通学校的大学生,各方面能力的差距不会太大,在这种情况下,训练和学习的方法尤为重要。其实,500题仅仅是一个标志,而且仅仅表示你做ACM-IC转载 2012-08-16 11:00:52 · 2943 阅读 · 0 评论 -
POJ 1985 Cow Marathon
题意:给出各个农场之间的距离,问你两个农场之间的最长距离是多少。 看到是和噩梦导航有联系的,我一开始就以为还是LCA的问题,我把1986的程序改了一下,结果TLE,所以还是另辟它法,我们知道最远的两个农场一定会在叶子结点之间。假设 不在叶子结点,那么它还可以往下走到叶子结点求出最大,这点我也考虑到,在用LCA的时候我用标志位标志了还是超时了。所以两次DFS就好了。代码:#原创 2012-08-22 16:12:51 · 1100 阅读 · 0 评论 -
POJ 1905,3122,3273
做了不想写解题报告,有点水。POJ 1905:卡精度的题目,WA到疯了。代码:#include#includeusing namespace std;const double eps = 1e-5;const double pi = acos(-1.0);int main(){ double L, N, C; while ( sc原创 2012-09-21 10:54:09 · 781 阅读 · 0 评论 -
HDOJ 1756 Cupid's Arrow
今天还是在看计算几何,原来计算几何一直有点差,不过今天这道题一交就过,我都惊讶了。题目是中文题很容易理解,就是判断一点是否在多边形内。判断点在多边形内有好几种方法,我这里用的是 射线法+微移,我原来以为真的要移动,看了学长借给我的 刘汝佳《算法艺术》,之后对这种方法有了比较深刻的认识。http://blog.csdn.net/aacm1992/article/details/7747483原创 2012-07-14 20:27:39 · 807 阅读 · 0 评论 -
POJ 3164 Command Network
这是最小树形图的题目,1是根节点,在开始的时候自己建图。输入n,m;代表有n个结点,接下来n行给出结点的坐标。接下来m行给出i,j两个整数,代表i到j有连通,求出i到j的坐标距离,最后求最小树形图。用朱刘算法可以解决。代码:#include#include#include#includeusing namespace std;const int maxn=105;#原创 2012-07-19 11:01:44 · 696 阅读 · 0 评论 -
HDOJ 1087 Super Jumping! Jumping! Jumping!
#include#includeusing namespace std;int a[1005], dp[1005];int main(){ int n,sum,i,j; while( scanf("%d",&n)&&n){ for( i=0; i<n; i++){ scanf("%d",&a[i]);原创 2012-07-21 20:10:58 · 743 阅读 · 0 评论 -
POJ 1273 Drainage Ditches
回顾网络流,学得最好的应该就是最大流了,都已经忘得差不多了。这道题还是很基础的题目啊,原来做过又做了一次。代码:#includeusing namespace std;#define INF 0x7fffffff#define maxn 205struct Edge{ int v,w,next;} e[maxn*2];int head[maxn],pre[max原创 2012-07-31 09:56:54 · 603 阅读 · 0 评论 -
多校联合 8.24 Encode
EncodeTime Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other)Total Submission(s) : 14 Accepted Submission(s) : 3Font: Times New Roman | Verdana | GeorgiaFont原创 2012-08-24 18:04:48 · 857 阅读 · 1 评论 -
USACO Section 1.2
题目倒是不怎么滴难,就是英语难念,怎么做还是做不动似的。要崩溃了,坚持!!milk2: 先把区间排序,然后把有相交的区间合并。一个for结束就好了。代码:/*ID: duanjia2PROG: milk2LANG: C++*/#include#include#includeusing namespace std;struct inter{ in原创 2012-08-29 15:04:00 · 626 阅读 · 0 评论 -
USACO Section 1.3
昨天到今天又做了四道简单的题。有开启了一个新的一页。milk: 很简单的贪心,先选单价便宜的呀。代码:/*ID: duanjia2PROG: milkLANG: C++*/#include#include#includeusing namespace std;struct node{ int p,a;} s[5005];bool cmp(no原创 2012-08-30 09:49:08 · 556 阅读 · 0 评论 -
POJ 3267 The Cow Lexicon
这道题目看了我很久。 题意:给你一个主串,和一些单词,问你在主串中至少删除几个字母,是的剩下的都是由给出的单词组成。 分析:这道题想了我老久,因为我也是在对DP的探究之中。对于主串str,在i的位子上有两个决策:删除,不删除。不删除的话必须在字典当中要有与之匹配的单词,删除的话那么dp[i]= dp[i-1] + 1.不删除则必须分析,如果 acorw 做到w时,假设有一个单词原创 2012-08-30 14:47:45 · 569 阅读 · 0 评论 -
POJ 2992 Divisors
这种题目,纯粹是折磨人的。那么容易TLE,昨天做了一个上午都没做出来,今天算是改对了,杨大哥说把素数打表,我嫌烦,不过打表之后确实会快。每一个数都可以用 m = p1^a1 * p2^a2 * ...... * pn^an来表示,所以它的因子的个数有(a1+1)*(a2+1)*...*(an + 1)中,很简单,每个因子都有指数都有0,1,2....到自身的ai+1个选择。 所以:我们原创 2012-09-01 09:57:50 · 492 阅读 · 0 评论 -
POJ 1664 分苹果,整数拆解
这个问题和整数拆解问题是一样的;就是将n拆成不大于m的数的和; 例如: n=6,m=6; 6=6; 6=5+1; 6=4+2; 6=4+1+1; 6=3+3; 6=3+2+1; 6=3+1+1+1; 6=2+2+2; 6=2+2+1+1; 6=2+1+1+1+1; 6=1+1+1+1+1+1;按如下分析:分解函数Split(n原创 2012-10-06 10:59:08 · 2234 阅读 · 0 评论 -
USC 20121007 组队赛 H题 矩阵乘法
H. DecodeBruce Force has had an interesting idea how to encode strings. The following is the description of how the encoding is done: Let x1,x2,...,xn be the sequence of characters of the string t原创 2012-10-10 16:38:17 · 1311 阅读 · 0 评论 -
ZOJ 1577 GCD & LCM
这道题很水,不过WA了好多,我要崩溃,只能看仔细再交,忽然发现还有0种的可能。我的做法很简单就是枚举。设p=a*x; q=b*x; a,b肯定互质,且a*b=y/x,当y%x!=0时肯定不可能。然后枚举互质a,b的对数乘以2就可以了。代码:#include#includeusing namespace std;int GCD(int a,int b){ if(b==0)原创 2012-08-22 09:14:41 · 720 阅读 · 0 评论 -
字典树 (解析加模版)
字典树:又叫trie树,单词查找树。是一种树形结构,典型的用于统计。经常用于统计一片文章当中出现确定的单词的次数,它的优点就在于:省略了相同前缀的比较。以下图为例:用单词carbohy,carhure,english,englnee来构造的trie树。 当你用trie树来查找一个原创 2012-07-06 12:24:41 · 934 阅读 · 0 评论 -
HDOJ 1251 统计难题
典型的trie树模版题,trie树在前面一篇文章已经讲过,这里不多赘述了。代码:#includeusing namespace std;typedef struct node{ int cnt; node* next[26];} Trie;Trie root;void Creat_Trie(char*str){ int len,i,j;原创 2012-07-06 20:30:58 · 980 阅读 · 0 评论 -
判断点在多边形内的方法
判断点P是否在多边形中是计算几何中一个非常基本但是十分重要的算法。判断方法也有好几种。 当你不确定多边形是否为凸多边形的时候采用射线法和转角法 1.射线法: 以点P为端点,向左方作射线L,由于多边形是有界的,所以射线L的左端一定在多边形外,考虑沿着L从无穷远处开始自左向右移动,遇到和多边形的第一个交点的时候,进入到了多边形的内部,遇到第二个交点的时候,离开了多边形原创 2012-07-14 21:00:01 · 3611 阅读 · 0 评论 -
POJ 1113 WALL
感觉计算几何好难,有些东西做一次理解之后留个模版就好了,不过模版要高度可靠才行,在做凸包时候我们知道极角排序虽然快一点,但是还有一种情况不能解决,当第一条边和最后一条边都存在三点共线的情况的时候是必然矛盾的,当严格要求凸包中的点集的时候就要用水平序了。这道题也要考虑共线的情况但不会有这不会影响求距离。所以还是用Graham Scan和极角排序。#include#include#incl原创 2012-07-16 11:10:21 · 685 阅读 · 0 评论 -
最小树形图
最小树形图,是指有向图的最小生成树。简单的来说,求一个图G0的最小树形图,先求出最短弧集合E0(从所以以vi为终点的弧中取一条最短的),若E0不存在(对于一给点vi没有入边),则图的最小树形图不存在。否则E0存在且不含有向环,则E0就是T0(最小树形图)中所有的边。如果存在且含有向环,则收缩成有向环为一点u,并形成图G1,继续求G1的最小树形图知道Gi,若Gi无最小树形图,则图G0也不存在最小树形原创 2012-07-18 16:37:12 · 3673 阅读 · 0 评论