摘要: 原题链接:点击此处 觉得这题好难呀!方法在紫书上,十一节公共表达式消除那小节(没带书回来,具体页数不清楚啦~) 这题树中的结点对应的子树都是二叉树,不存在只有一个儿子的情况。输入的字符串中也只有两种情况,结点名字后面紧跟一个左括号的,和不跟括号的。 因此很容易判断一个结点是否为叶子结点:只要在原字符 阅读全文
posted @ 2016-07-30 22:14 君子酱 阅读(310) 评论(0) 推荐(1) 编辑
摘要: 原题链接:点击此处 题意: 一只叫Freddy的青蛙蹲坐在湖中的一块石头上。突然他发现一只叫Fiona的青蛙在湖中的另一块石头上。Freddy想要跟Fiona约会,但由于湖水太脏,他不想游泳过去而是跳过去找Fiona。 很不幸,Fiona所在的石头距离他有点远,甚至超出了他的跳跃能力。然而Fredd 阅读全文
posted @ 2016-07-30 22:05 君子酱 阅读(324) 评论(0) 推荐(0) 编辑
摘要: 原题链接:点击此处 题目大意在相通n个岛屿的所有桥都坏了,要重修,重修每一个桥所用的时间不同,求重修使每个岛屿都间接或直接与其他岛屿相同时所用的的最短时间(只有修完一个桥后才可修下一个桥)。简言之就是求最小生成树。 对于数据,数据输入的第一行n代表岛屿的个数,当为0是结束程序,接着n-1行开始时为这 阅读全文
posted @ 2016-07-30 21:54 君子酱 阅读(214) 评论(0) 推荐(0) 编辑
摘要: 原题链接:点击此处 1233的升级版(因为差不多所以都放一起了),就是加了一个状态,因此我们可以先判断每条路的状态,如果是修好的,就让它们的成本是0;如果没修,就给出成本。其余地方和1233一样,程序唯一的改动在此: 判断状态: for(i=1;i<=n;i++) { scanf("%d %d %d 阅读全文
posted @ 2016-07-30 21:45 君子酱 阅读(89) 评论(0) 推荐(0) 编辑
摘要: 原题链接:点击此处 1222的升级版,按照费用从低到高排序,然后如果不是在一个集合里就合并,并加上所需的路程,最后所得就是所需的最短路程了。 程序如下: #include <iostream> #include <algorithm> #include <cstdio> using namespac 阅读全文
posted @ 2016-07-30 21:40 君子酱 阅读(111) 评论(0) 推荐(0) 编辑
摘要: 原题链接:点击此处 题意很清楚,我们来分析下例子:第一行告诉你,一共有4个点,2条路。下面两行告诉你,1、3之间有条路,4、3之间有条路。那么整幅图就被分成了1-3-4和2两部分。只要再加一条路,把2和其他任意一个点连起来,畅通工程就实现了,那么这个这组数据的输出结果就是1。 那该怎么办呢?可以运用 阅读全文
posted @ 2016-07-30 21:32 君子酱 阅读(166) 评论(0) 推荐(0) 编辑