摘要:
题意比较好理解,但是题目给出的要求却比较麻烦,给出的有向边是有顺序的,后面的边不能用在它前面出现的边,因为题目要求找出的最短路必须是按照给出的顺序,麻烦就麻烦在这,否则一遍bfs就找出最短路了,看到discuss里有人说可以用O(n)过,但是就是没想出来,最后,不得不查了解题报告,看到有人是将点的位置进行连线,相邻位置之间设为1,如果临近的相同元素之间设为0 ,这样从0~n-1找一天最短路就可以了。Hint:n是大于100000,开到10^6差不多,因为这挂在了15组数据上一次了。代码:View Code #include <stdio.h>#include <stdlib. 阅读全文
摘要:
题意:有N座城市,M条路,求是否有两座城市间的路长度大于等于s。思路:题目中说这条路可以是任意地方开始,任意地方结束,所以只要有一条路大于等于s就可以了。可以先用排除法来确保这个图为无向无环图。1)如果图中有环,输出“YES”;2)如果图中有自环,输出“YES”;3)如果图中有重边,输出“YES” ;在输入的时候判断一下,然后用floyd求最长路,所有路中有一条路长度大于等于s就可以完成。代码:View Code #include <stdio.h>#include <stdlib.h>#include <string.h>#include <iost 阅读全文
摘要:
题意:乌拉尔锦标赛分为两轮,每轮有N道题,总共有2*N道题,但是在这些题中,有些题目有相似性,这样的题目是不允许放在同一轮里的,题目要求给出合理的题目分组来。分析:刚开始想用BFS搜的,在搜的过程中进行染色,但是最后放弃了这个思路,因为这个图极有可能是不连通的,怎样确定每个连通分支起始点的颜色才能找到一个合理的分组来就成为解题的关键,但是这个却没有一个准确的规律可循,所以只能用分组背包。其实就是先进行一遍dfs的深搜,将每个连通分支的点都分为两种颜色,将每个连通分支作为一组,然后进行dp求解。代码:View Code #include <stdio.h>#include <s 阅读全文