06 2012 档案
poj Asimple Problem With Integers
摘要:http://poj.org/problem?id=3468题目大意:给你n个整数,两种操作,求一段区间的和一段区间内全部加上某个整数简单线段树题区间内一部分是固定区间和另一个是此区间内每个数都需要加的量注意用64为整数详情见代码注释:#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<cmath>#include<queue>#include<algorithm>using namespace std;cons 阅读全文
posted @ 2012-06-14 11:24 夜-> 阅读(135) 评论(0) 推荐(0)
poj 2750 Potted Flower
摘要:http://poj.org/problem?id=2750最近在poj上做的线段树题 c++提交要比g++提交快很多,我知道c++要快一些,不过快的有点离谱了吧,都左右是否超时了题目大意:n盆花围成圈 每盆花都有它的value要做一个弧形长椅 不能是一个圆,因为必须有缺口,使得长椅附近花的value值和最大m次替换 每替换一次问替换后的最佳答案本题的难点在于环,因为线段树的建立是线状的所以在求最终答案是要注意线段树要保存本段从左起最大值,最小值,从右起最大值,最小值,和总体最大值,最小值,总和最大值和最小值都必须至少包含一盆花这都是为求最后答案做准备。最后答案基本分两种1.最小值为正,此时用 阅读全文
posted @ 2012-06-13 18:15 夜-> 阅读(214) 评论(0) 推荐(0)
poj 2886 Who Gets the Most Candies
摘要:http://poj.org/problem?id=2886这个题和插队买票那题一样 http://www.cnblogs.com/liulangye/archive/2012/06/11/2545529.html题目大意:一些人围成一圈第一个人跳出圈后会告诉你下一个谁跳出来跳出了的人所得到的糖果数量和他跳出的顺序有关线段树在这里只是一个二分搜索的作用思路:1.求第几个跳出者所得糖果数量2.根据输入范围,求的第几个人是得到糖果最多的 假设是J3.建立线段树,线段树区间表示区间内人的个数,搜索第几个人时所经过的路径区间人数的减一然后根据提示求的下一个跳出的人是谁 并记录第J个人是谁代码及其注释: 阅读全文
posted @ 2012-06-12 17:36 夜-> 阅读(350) 评论(0) 推荐(0)
poj 2777 Count Color
摘要:http://poj.org/problem?id=2777不多说了 和贴海报那题一样 http://www.cnblogs.com/liulangye/archive/2012/06/11/2545349.html代码:#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<cmath>#include<queue>#include<algorithm>#include<vector>using nam 阅读全文
posted @ 2012-06-11 21:39 夜-> 阅读(157) 评论(0) 推荐(0)
poj 2828 Buy Tickets
摘要:http://poj.org/problem?id=2828坑爹呀你c++ 跑不到2000g++ 直接超时有这么夸张吗 无语了题目大意:买票 不过有插队的 n个人依次插队给你插队位置和value 问你最后value顺序其实就是最后人的顺序这题最好倒着插入因为 最后一个人如果插在第m个空的后面 那么他一定在m+1的位置倒着来的话 无路第几个人 他插在第m个空的后面 那么他的左面就需要m个空位在这里线段树只不过用来二分搜索代码及其注释:#include<iostream>#include<cstdio>#include<cstring>#include<s 阅读全文
posted @ 2012-06-11 20:54 夜-> 阅读(278) 评论(0) 推荐(0)
poj 2528 Mayor's posters
摘要:http://poj.org/problem?id=2528题目大意:贴海报 有先后顺序会发生覆盖 问你最后漏在外面的有几张海报思路:1.所给数据范围比较大,而且是以块为单位 所以首先要离散化排序+把块变成线2.建树3.按所给海报顺序进行贴海报 解决覆盖问题4.搜索一遍 看看有哪些海报是漏在外面的 统计数量代码及其注释:#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<cmath>#include<queue>#inclu 阅读全文
posted @ 2012-06-11 17:20 夜-> 阅读(213) 评论(0) 推荐(0)
poj 3686 The Windy's
摘要:http://poj.org/problem?id=3686拆点+KM算法题目大意:n个玩具在m台机器上完成所需时间个不同一台机器只有完成一个玩具的的制作才能继续完成其它的问你n给玩具完成制作最小平均时间思路转自http://blog.sina.com.cn/s/blog_6af663940100mw9t.html此题构图很巧妙。设n个订单的执行时间分别为t1,t2…tn,则n个订单的总的执行时间是t1*n+t2*(n-1)+t3*(n-2)+…+tn-1*2+tn。将每个机器j拆成n个点,第k个点表示倒数第k个订单在此机器上完成,连边权值为:tmp[i][j]*k。这样就转换成了求二分图最小 阅读全文
posted @ 2012-06-10 16:22 夜-> 阅读(206) 评论(0) 推荐(0)
poj 2400 Supervisor,Supervisee
摘要:http://poj.org/problem?id=2400KM最大匹配第一次KM的题目详解就不说了 可以看这里:http://blog.163.com/huangbingliang@yeah/blog/static/94161399201011291044527/我的代码和思路基本上市抄了别人的不过还是要整理一下1,KM 求最佳匹配2,dfs求所有答案还是看代码吧:#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<queue> 阅读全文
posted @ 2012-06-10 13:30 夜-> 阅读(254) 评论(0) 推荐(0)
poj 2914 Minimum Cut
摘要:http://poj.org/problem?id=2914此题和 hdu 3691 Nubulsa Expo几乎一样不再解释代码:#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int INF=0x7fffffff;const int N=505;int a[N][N];int dist[N];bool visited[N],dele[N];int n,m;int nd1,nd2;void Prim(){ int st=1; while(dele[st 阅读全文
posted @ 2012-06-08 10:58 夜-> 阅读(203) 评论(0) 推荐(0)
hdu 3691 Nubulsa Expo
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=3691Stoer-Wagner算法 不理解不理解呀大体步骤是这样子的1,用类似Prim 的过程求得最后更新点 和倒数第二更新点2,求最后更新点和其它点的割集3,将最后一个点合并到倒数第二个更新点上代码:#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int INF=0x7fffffff;const int N=305;int a[N][N];int dist[N];bo 阅读全文
posted @ 2012-06-08 10:44 夜-> 阅读(267) 评论(0) 推荐(0)
poj 4155 The Game of 31
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4155题目大意:1,2,3,4,5,6 大小的牌 各有4张已经选了一些 可能继续选,可能不继续问谁会赢思路:无论该谁选 他的所有可供选择的牌中 只要有一张牌使他胜利(使对方输) 他就会胜利 否则就会输注意:输入用scanf();代码及其注释:#include<iostream>#include<cstring>#include<stack>#include<cstdio>#include<math.h>#include<algorithm> 阅读全文
posted @ 2012-06-05 17:48 夜-> 阅读(172) 评论(0) 推荐(0)
poj Road Construction
摘要:http://poj.org/problem?id=3352题目大意:给你n个旅游点 m条路已知任意两点之间直接或间接相通,两点之间最多一条直达路(没有重边)但是如果修理某一条路的话 就会使得这条路不能用,就会出现某两点不通的现象所以要再建几条路使得任意两点之间至少有两条没有公共边的路径问至少多建几条边?方法:1,缩点2,建新树3,求叶子节点注意:由于是双向边,处理起来要谨慎。假设叶子节点数时 v至于为什么最后答案是(v+1)/2 (只有一个根结点特判)我们可以这么想如果v为偶数 任意两叶子结点之间连一条边 那么这两个叶子结点到根结点的路径上的点就全在环上了 所以至少是v/2如果是v为奇数 任 阅读全文
posted @ 2012-06-04 11:52 夜-> 阅读(168) 评论(0) 推荐(0)
poj 3114 Countries in War
摘要:http://poj.org/problem?id=3114题目大意:n个间谍 他们之间传送信息需要一定的时间一个联通分量里面的间谍属于一个国家,之间的信息传递不需要时间然后问你从一个间谍传一个信息到另一个间谍那需要最少时间 也可能传不到联通缩点+最短路缩点所得到的新图 可能是因为有重边或是太稠密 用邻接表容易超时基本步骤:1,输入去重边2,Tarjan缩点3,重新调整缩点后间谍之间的信息传递时间4,最短路注意: 图有可能不完全连通代码及其注释:#include<iostream>#include<cstring>#include<stack>#includ 阅读全文
posted @ 2012-06-03 17:22 夜-> 阅读(196) 评论(0) 推荐(0)
poj 3592 Instantaneous Transference
摘要:http://poj.org/problem?id=3592每次做联通分量的题都是细节方面出错 伤不起呀一张图 有些点是有矿可走 有些不可走 有些是时空转换点矿车从左上开始走问最多能才多少矿1,把二维图变成一维 由于时空转换点的存在使图存在了环2,缩点 把环缩成一个点3,重新建树,4,搜索最多矿以后再也不在Tarjan里进行重建图了 太容易出错了果断在Tarjan后再dfs重新建图 虽然效率低了点但是不容易出错而且只要整体算法选择正确 是不会超时的由于数据小 所以dfs搜索最多矿就可以 不过要标记代码及其注释:#include<iostream>#include<cstrin 阅读全文
posted @ 2012-06-01 20:06 夜-> 阅读(226) 评论(0) 推荐(0)
poj 2186 Popular Cows
摘要:http://poj.org/problem?id=2186给你n头牛 他们之间会有一种 A认为B popular 的关系 而且这种关系是可传递的问你有多少头牛是被所有其他的牛认为popular1,缩点 将一个联通分量内的点缩成一个2,缩点同时记录联通分量内点的个数3,缩点后图变成了树 或者是 (非树)森林 如果是树 则树根连通分量内的点就是答案 如果是森林 答案为0 生成的树或森林 根方向上是被指向的。4,由于3的原因 搜索时还有注意标记哪些缩点是没有可能成为根的缩点5,如果根缩点只有一个(树) 则根就是答案 如果多个(非树森林)则为0注意 Tarjan 搜索是并不一定一次就能将所有的点搜干 阅读全文
posted @ 2012-06-01 09:53 夜-> 阅读(183) 评论(0) 推荐(0)