2018年3月8日

摘要: 用Floyd算法求出传递闭包,然后用dfs求出每条连通分量。注意其中用到的几个小技巧: 阅读全文
posted @ 2018-03-08 21:34 sapphirebitter 阅读(150) 评论(0) 推荐(0) 编辑

2018年3月7日

摘要: 稍微改变即可求传递闭包,即关心两点之间是否有同路: 阅读全文
posted @ 2018-03-07 20:00 sapphirebitter 阅读(443) 评论(0) 推荐(0) 编辑

2018年3月5日

摘要: 使用FIFO队列实现: 阅读全文
posted @ 2018-03-05 20:27 sapphirebitter 阅读(183) 评论(0) 推荐(0) 编辑

2017年12月5日

摘要: Alisha 举办聚会,会在一定朋友到达时打开门,并允许相应数量的朋友进入,带的礼物价值大的先进,最后一个人到达之后放外面的所有人进来。用优先队列模拟即可。需要定义朋友结构体,存储每个人的到达顺序以及携带礼品价值,并重载<运算符。然后模拟即可。 阅读全文
posted @ 2017-12-05 21:50 sapphirebitter 阅读(166) 评论(0) 推荐(0) 编辑
 
摘要: 题目给出一个字符串,由a~z表示甜度,随字典序增大,字符串首尾相连形成一个圈,要求从一个位置开始字典序最大的字符串,输出位置以及是顺时针还是逆时针表示。顺时针用0表示,逆时针用1表示。 此题只需要查找字符串的最大字典序排列即可,模拟对字符串的翻转以及排列操作,可以用二分来查找位置来节省时间。 最小表 阅读全文
posted @ 2017-12-05 21:44 sapphirebitter 阅读(172) 评论(0) 推荐(0) 编辑

2017年11月28日

摘要: 如果枚举每个套餐,并每次都求最小生成树,总时间复杂度会很高,因而需要先求一次原图的最小生成树,则枚举套餐之后需要考虑的边大大减少了。 具体见代码: 阅读全文
posted @ 2017-11-28 20:14 sapphirebitter 阅读(198) 评论(0) 推荐(0) 编辑

2017年11月22日

摘要: int cmp(const int i, const int j) { return w[i]<w[j]; }///间接比较函数,w[i]表示边i权值 int find_set(int x) { return p[x] == x ? x : p[x] = find_set(p[x]);} int Kruskal(){ int ans = 0; for (int i =... 阅读全文
posted @ 2017-11-22 22:21 sapphirebitter 阅读(192) 评论(0) 推荐(0) 编辑
 
摘要: 紫书354页的题,将表达式树进行公共表达式消除,化为等价的图。因为需要判断某一个是否出现过,所以需要快速比较,采用哈希表的形式,将a~b与1~27一一对应,不采用0,因为0与0000是相同的,对于每一个树,都预先给予其一个编号,然后将其所表示的字符串化为27进制的数,然后递归建造其左右子树,如果发现 阅读全文
posted @ 2017-11-22 19:56 sapphirebitter 阅读(1594) 评论(0) 推荐(0) 编辑

2017年11月20日

摘要: strstr函数用于搜索一个字符串在另一个字符串中的第一次出现,该函数返回字符串的其余部分(从匹配点)。如果未找到所搜索的字符串,则返回 false。 阅读全文
posted @ 2017-11-20 21:15 sapphirebitter 阅读(229) 评论(0) 推荐(0) 编辑

2017年11月15日

摘要: vector G[maxn]; void read_tree(){ int u,v; scanf("%d",&n); for(int i = 0; i < n-1; i++){ scanf("%d%d",&u,&v); G[u].push_back(v);///输入u相邻的点v G[v].push_back(u); ... 阅读全文
posted @ 2017-11-15 20:55 sapphirebitter 阅读(160) 评论(0) 推荐(0) 编辑