随笔分类 -  DFS

摘要:题意:一个城市有N条公交线路,每条线路都是一个环,现在想将这些公交线路合成一条,问能不能合成一个环。思路:因为现在的每条公交线路已经是一个环了,只要两个环之间有一个公共点,就能从这个环到另一个环,但是有图不连通的情况,这种情况下直接输出0。这个有点坑人,明明给出的数据范围很大,但其实后台数据应该没那么大,如果 用数组会超内存,但有vector就不会,应该是测试数据范围比给出的要小。代码:View Code #include <stdio.h>#include <stdlib.h>#include <string.h>#include <iostream 阅读全文
posted @ 2013-01-30 09:39 Misty_1 阅读(246) 评论(0) 推荐(0)
摘要:题意:乌拉尔锦标赛分为两轮,每轮有N道题,总共有2*N道题,但是在这些题中,有些题目有相似性,这样的题目是不允许放在同一轮里的,题目要求给出合理的题目分组来。分析:刚开始想用BFS搜的,在搜的过程中进行染色,但是最后放弃了这个思路,因为这个图极有可能是不连通的,怎样确定每个连通分支起始点的颜色才能找到一个合理的分组来就成为解题的关键,但是这个却没有一个准确的规律可循,所以只能用分组背包。其实就是先进行一遍dfs的深搜,将每个连通分支的点都分为两种颜色,将每个连通分支作为一组,然后进行dp求解。代码:View Code #include <stdio.h>#include <s 阅读全文
posted @ 2013-01-28 10:32 Misty_1 阅读(279) 评论(0) 推荐(0)
摘要:题意:航空公司有p名飞行员,n条航线,每条航线上都必须有两名飞行员完成,一名正驾驶员,一名副驾驶员,公司规定,正驾驶员的工作年龄要比副驾驶员的多一年,现在给出你n条航线上驾驶员的编号,但是不知道谁是正驾驶,谁是副驾驶,求出这个公司所有驾驶员工作年龄的最大差值,最大差值不得大于50,如果不能满足条件就输出-1 。思路:建图,每条航线上的正副驾驶之间连线,如果这是一个连通图,这直接有bfs枚举每一个点为起点,然后判断是否成立。如果不是连通图,先用dfs标记一下每个点属于那个连通图,然后用bfs判断每个连通图是否满足条件,如果都满足,则最大差值为49 ,如不满足则输出-1 。代码:View Code 阅读全文
posted @ 2013-01-25 09:12 Misty_1 阅读(251) 评论(0) 推荐(0)
摘要:寒假集训已经开始几天了,直到搬完宿舍才感觉安定下来,开始静下心了认真学习算法,这几天心无旁骛的学习,效率自然提了上来,感觉以前不熟的算法或是没想透的地方在做过两道题后都可以理解了,好好利用这十几天的集训,提高一下自己的水平吧~题意:IT公司有n名程序员,他们都认为自己是最优秀或第二优秀的程序员,公司的管理者打算将他们分到不同的开发小组里,分配的条件如下:(1、任意选出一名未被分配的程序员,然后给他建立一个开发小组,他作为当前程序员。(2、如果在他的同事中,他认为这个人比他优秀,那么这个比他优秀的人就不能被分配到其他小组,只能分配到这个小组,成为这个小组的当前程序员。题目要求这n名程序员最多和最 阅读全文
posted @ 2013-01-23 21:16 Misty_1 阅读(224) 评论(0) 推荐(0)
摘要:重新开始做搜索题,发现理论和应用还是有很大的差别的。。。。题意:给出一个有1*1的小矩形组成的大矩形,矩形的边可能是墙,也可能是门,要出(0,0)点到达给定的一个点,问最少要过几个门。解题过程:首先,discuss里面说,给出的点不一定在给出的矩形里,如果不在直接输出0。然后就是建图了,其实这题思路很简单,但是建图麻烦,刚开始的时候,按题目中给出的方法建图,用一条线段的左下点记录,但是这样只是记录了线段的状态,并没有建图,然后参考了下面的Blog建图才AC的,但是还是ML了几次,我发现在题目中随机定义变量会很浪费内存,所以最好提前定义好所有变量,也可以重复利用变量。http://www.cnb 阅读全文
posted @ 2012-10-10 10:38 Misty_1 阅读(244) 评论(0) 推荐(0)
摘要:题意:给出两个数N和K,让你改变N中的某些数,找到一个数M,是的M%k== 0 ,并且找到的M要尽可能小。思路:呃,其实我真的不擅长搜索,特别是搜,不过这题还是学到了很多东西。首先是一种大整数取模的方法。其实是参考着这篇解题报告学会的,http://blog.csdn.net/lyy289065406/article/details/6698787对于这题,他讲的很详细,我也是参考他的思路,所以就不说了。代码:View Code #include <stdio.h>#include <stdlib.h>#include <string.h>#include 阅读全文
posted @ 2012-08-11 10:20 Misty_1 阅读(214) 评论(0) 推荐(0)
摘要:题意:有N个城市M条路相连,有两种收费方式,一种是在城市Ci时收费为Pi,另一种是在城市Bi中Ri,求从城市1到城市N的最小花费。其中Pi要小于Ri。思路:其实我觉得这就是一道变形的最短路问题,虽然是用的深搜,但原理是一样的。首先将于城市Ai相连的城市都存起来,然后用一个数组记录城市I是否被访问过,如果访问过,当然可以直接在城市I缴费,原以为每个点访问一次就行了,可是后来想一想,不是这样的,要是这样的就没法提前在Ci城市缴费了,后来在网上看到有人是“闸数”,也就是一个点最多不会被访问超过3次,否则就退出,然后就按这个方法来做的~代码:View Code #include <stdio.h 阅读全文
posted @ 2012-08-08 19:59 Misty_1 阅读(157) 评论(0) 推荐(0)
摘要:感觉自己的dfs学的很烂,正好用这道题练练,顺便再研究一下dfs的思想~这题还有一个要注意的地方就是输出格式的问题,PE了两次~代码: 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 int f[15],a[15],b[15]; 5 int n; 6 void dfs(int x,int s) 7 { 8 int i; 9 b[s]=a[x];10 if(s==6)11 {12 for(i=1;i<=6;i++)13 {14 i... 阅读全文
posted @ 2011-12-19 17:24 Misty_1 阅读(151) 评论(0) 推荐(0)