摘要: 题意:有一个环形体育场,有n个人坐,给出m个位置关系,A B x表示B所在的列在A的顺时针方向的第x个,在哪一行无所谓,因为假设行有无穷个。 给出的座位安排中可能有与前面矛盾的,求有矛盾冲突的个数。#include #include #include #include using namespace std;const int maxn=50010;int n,m,r;int father[maxn];int pos[maxn];//pos[i]表示i相对根节点的位置(始终大于0的,顺时针方向)void init(){ for(int i=1;i<=n;i++){ fat... 阅读全文
posted @ 2013-09-02 15:40 辰曦~文若 阅读(196) 评论(0) 推荐(0)
摘要: 完全没思路,题目也没看懂,直接参考大牛们的解法。http://www.myexception.cn/program/723825.html题意是说有N个字母组成的密码锁,如[wersdfj],每一位上的字母可以转动,变成字母表中的下一位。 如w可转动变成x,z变成a。但是题目规定,只能同时转动某个区间上的所有字母,如[1,3], 那么第1到第3个的所有字母要同时转动, 那么[wersdfj]经过一次操作就变成[xfssdfj].一共有M个区间是可以操作的。经过可操作区间进行的操作得到的所有情况,都是同一个的。 也就是指不管我在题目给出的某一个区间怎么转动,其它位上的字母都不变,它仍视为同一种。 阅读全文
posted @ 2013-09-02 14:23 辰曦~文若 阅读(337) 评论(0) 推荐(0)
摘要: 思路:见代码吧。#include #include #include #include #include using namespace std;const int maxn=2010;int n,m;int father[maxn];int num[maxn]; //num[i]表示int rel[maxn]; //rel[i]表示它与根节点的关系,0代表同性,1代表异性void init(){ for(int i=0;inum[y]){ father[y]=x; num[x]+=num[y]; //更新y与根节点x的关系 rel... 阅读全文
posted @ 2013-09-01 21:37 辰曦~文若 阅读(271) 评论(0) 推荐(0)
摘要: 想到枚举m个点,然后求最小生成树,ratio即为最小生成树的边权/总的点权。但是怎么枚举这m个点,实在不会。网上查了一下大牛们的解法,用dfs枚举,没想到dfs还有这么个作用。参考链接:http://blog.csdn.net/xingyeyongheng/article/details/9373271#include #include #include #include #include using namespace std;const int INF=0x3f3f3f3f;int n,m,tot; //tot为选取的m个点的总权值int choseNode[16]; //存储选取的m个. 阅读全文
posted @ 2013-09-01 16:26 辰曦~文若 阅读(556) 评论(0) 推荐(0)
摘要: 一开始想到用BFS,写了之后,发现有点不太行。网上查了一下别人的解法。首先将边从小到大排序,然后从最小边开始枚举,每次取比它大的边,直到start、end属于同一个集合,即可以连通时停止。过程类似于最小生成树。舒适感即为选取的最后一条边减去一开始的那条边,所有情况取最小值。#include #include #include #include #include #include #include using namespace std;const int INF=0x3f3f3f3f;const int maxn=211;const int maxm=1010;int n,m,q,ans,s, 阅读全文
posted @ 2013-09-01 14:08 辰曦~文若 阅读(216) 评论(0) 推荐(0)
摘要: 经过第六周三场比赛,这次假期里的六周ACM训练算告一段落了。还有一周就要开学了,回家是不可能的了,下一周就AA题目、看看电影、玩会游戏什么的,放松一阵子吧。接下来我的任务就是主攻数据结构和数学方面,要好好努力,不要坑队友就行。估计接下来一学期够有的忙了。 还好,为了全心全意搞ACM,把学生会、社团全退了,精力实在有限。而且有些东西尝试过,也就够了,不需要再费精力。 总的来说,这次暑假利用的挺充分的,至少有东西值得我去做,虽然可能这条道路很艰辛、而且不一定如人意,但既然我选择了,就一往直前吧。 阅读全文
posted @ 2013-08-31 18:38 辰曦~文若 阅读(265) 评论(0) 推荐(1)
摘要: 题意:有N封邮件, 然后又两种操作,如果是M X Y , 表示X和Y是相同的邮件。如果是S X,那么表示对X的判断是错误的,X是不属于X当前所在的那个集合,要把X分离出来,让X变成单独的一个。最后问集合的个数。方法一:设立虚父节点思路:n~n+n-1作为一开始初始化的根节点,而0~n-1作为虚拟根节点(即初试时它们指向n~n+n-1),之后删除节点操作时用n+n-1~n+n+m作为备用节点。 删除时直接修改0~n-1指向的节点(即0~n-1的父亲的值)变为备用节点 设cnt为备用节点,假如一个集合中1是这个集合的父节点(其实是虚的,因为它还指向一开始初始化的n+1,这才是该集合的真正... 阅读全文
posted @ 2013-08-31 18:29 辰曦~文若 阅读(238) 评论(0) 推荐(0)
摘要: 比赛开始,又是一阵惊呆。。。A -在那山的那边海的那边B -有一群蓝精灵C -他们活泼又聪明D -他们调皮又灵敏E -他们自由自在生活在那F -绿色的大森林G -他们善良勇敢相互都欢喜H -哦...可爱的蓝精灵!!!可惜啊,题目一点也不可爱。。。结果四个小时下来,就A了,可怜可怜的一道题,排名14。。。另外有三道题WA,其中一题WA了四次,比赛过后请教A的人。天哪,只要加一句条件就可以AC了,当时怎么没仔细考虑了啊。总之,两个字,悲催。。。 阅读全文
posted @ 2013-08-30 20:14 辰曦~文若 阅读(198) 评论(0) 推荐(0)
摘要: 一开始思路弄错了,刚开始想的时候误把所有截止时间为2的不一定一定要在2的时候买,而是可以在1的时候买。举个例子:50 2 10 1 20 2 10 1 50+2050 2 40 4 30 4 20 1 10 1 20+50+30+40思路:用优先级队列,每次取价格最大的(如果价格相同,取截止时间最大的)。 然后往1~maxdx里加,首先看它截止时间上的位置是否已经存在其他物品,如果不存在,就加到该处。 如果存在,就往前判断,直到有一处空位没被占用,就加入到该位置。 后来网上看了一下,可以用并查集查找不冲突的时间点 不用并查集优化,110ms;用并查集后,63ms#include #... 阅读全文
posted @ 2013-08-30 12:03 辰曦~文若 阅读(252) 评论(0) 推荐(0)
摘要: 哈哈,一次AC。题意:给你 1-n 编号的立方体,然后移动包含指定编号的立方体的堆移到另一个堆上边, 询问指定的编号立方体下面有多少个立方体。思路:由于并查集是存储的是它的父亲,那么只能从父亲那里更新数据,即只能往上推,不能往下推。 所以我干脆倒过来思考,它让我求编号为i的立方体下面有多少立方体, 那么我只要求在它上方的立方体个数,假设为m。以及整个堆中立方体的个数tot,则答案为tot-m-1,1为它自己。 开一个数组upnum,存储编号为i的立方体上方的立方体个数。 每次再查找父节点路径压缩之前先更新,从最顶层即根节点往底层更新#include #include #incl... 阅读全文
posted @ 2013-08-29 16:54 辰曦~文若 阅读(226) 评论(0) 推荐(0)