摘要: http://acm.hdu.edu.cn/showproblem.php?pid=4750题意: 给出一些边,一个点到另一个点的一条路径,这条路径上的权值尽可能小,然后他给你一个t 值,然你计算比 t 大的这些路径有多少条。坑爹: 看了下边和点的数量,暴力是不行的,但也还是试了一下,因为当时实在想不到怎么做,就每次找比 t 大的边然后向这条边上的两个点外拓展,最后只用计算一下两边点个数相乘再乘以二,最后发现是不行的,因为我这次找到比 t 大所对应的边然后拓展出去所经过的边也有可能大于 t , 但是下次拓展到这个边的时候就会有重复,一下子就不知道怎么弄了。解法: 开始的时候也想过要做一些... 阅读全文
posted @ 2013-09-21 21:12 pc.... 阅读(462) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=3572题意: 给出N个任务,M个机器,每天每台机器只能处理一件事,接下来N行,每行有p s e分别表示这个任务要用p天,要在s~e天完成,问你这所有任务能不能完成。坑爹: 模板题,注意一下vector数组clear的时候控制好长度,有可能会超时。解法: 将N个任务标号为1~N,用个max_Day来找最大的天数,然后天数的标号为N+1~max_Day+N, 建立一个源点0,汇点max_Day+N+1。建图的步骤:先将所有任务与源点相连,权值为完成所需天数,再将这个任务与再这个任务范围内的时间(天)相连,权... 阅读全文
posted @ 2013-09-05 11:07 pc.... 阅读(859) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=3549题意: 给出N个点M条边,求1到N的最大流量。坑爹: 模板解法: 在白书上看到的ISAP算法就敲了个模板出来A了这道题,就是想测试一下EK和ISAP的时间差多少,EK是921MS,ISAP是109MS。 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 7 const int maxn = 1000 + 10; 8 const int INF = 0x3fffffff; 9 10 stru... 阅读全文
posted @ 2013-09-04 20:50 pc.... 阅读(304) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=4512题意: 给你一个序列,找出回文串,可以不连续的,但必须满足从前面到中间是递增的,中间到结尾时递减的。如果没有中间的话,也就是回文串是偶数,则中间两个必须相等。坑爹: 本想直接将序列反过来然后和原串做LCIS找到一个最长的序列,但是有个恶心的数据一下子没想到,结果WA了好久, 31 2 1 3 这组数据,如果反过来的话他们的LCIS值会是3,但根据题意是不对的。解法: 原本的模板是两个for,都是1~N循环,但这样就会出现上述问题,所以在里层循环范围改成 j 2 using namespace st... 阅读全文
posted @ 2013-09-03 17:21 pc.... 阅读(355) 评论(0) 推荐(0) 编辑
摘要: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1309题意: 给出凹凸曼和小怪兽的坐标,然后求出一对最近的凹凸曼和怪兽,算出他们的距离然后除以他们的速度之和。坑爹: 最小点对的一个模板,就只是要判断一下是不同种类(超人或怪兽)的点才可以计算就行了。解法: 用二分的方法做,先将X从小到大排序,然后二分找出之间最小距离,这是算出了X最近的距离,比如这之间的点的最小距离是ans,然后我们只要把 x>=mid-ans && x 2 #include 3 #include 4 #include 5 using namespace 阅读全文
posted @ 2013-08-31 21:21 pc.... 阅读(753) 评论(0) 推荐(0) 编辑
摘要: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1307题意: 找一条路径 1.这条路径中的最大的边一定要尽可能的小 2.满足1的情况下即最大的边相同的时候在找最短路径。坑爹: 一开始只用最小生成树做,发现如果给的边的权值都一样的话,那你并查集建图完全就跟你输入的顺序有关,权值都一样的话,并起来的边未必是你最短路要走的边。 找那个最大的边的时候我用递归来找最大的边中间可能有错误,现在还是不知道为什么。解法: 不用DFS来找最大的边,因为kruskal中加的边是经过排序的,所以只要加到起点和终点连通的时候就停止了,并返回那个值,这个值... 阅读全文
posted @ 2013-08-31 20:50 pc.... 阅读(307) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=4513题意: 找出给定的序列中最长的回文串,但有一个要求,必须是从左边到中间中的每一个数字,左边的都要小于等于右边的,而中间到右边的则相反。坑爹: 如果暴力的话要O(n^2) 而n最大能到100000,所以暴力是不行的。解法: Manacher的算法的模板,大约复杂度为O(n)。 1 #include 2 using namespace std; 3 4 const int maxn = 110000 + 10; 5 const int INF = 0x3fffffff; 6 7 int str[m... 阅读全文
posted @ 2013-08-30 16:37 pc.... 阅读(460) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=3159题意: 给出A , B , C 说A的糖果要比B的糖果多C个一下,也就是A - B 2 #include 3 #include 4 using namespace std; 5 6 const int maxn = 150000 + 10; 7 const int INF = 0x3fffffff; 8 9 int n; 10 int m; 11 12 struct Edge{ 13 int from; 14 int to; 15 int values; 16 int next... 阅读全文
posted @ 2013-08-29 19:36 pc.... 阅读(213) 评论(0) 推荐(0) 编辑
摘要: 题意: 给出多组关系,a1+a2+a3...... > k 或者 2 using namespace std; 3 4 const int maxn = 100 + 5; 5 const int INF = 0xfffffff; 6 7 struct EDGE{ 8 int x; 9 int y;10 int l;11 }Edge[105];12 int m;13 int n;14 int d[maxn];15 16 17 void AddEdge(int x,int y,char sym[],int ans,int i)18 {19 if(sym[0]... 阅读全文
posted @ 2013-08-28 16:32 pc.... 阅读(257) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=3234题意: 给出很多组关系(异或)(点的标号是从0到n-1),然后让你求指定的关系的答案,如果求不出则输出I don't know. 若输入的关系和之前输入的关系有冲突,则输出The first i facts are conflicting. i 表示第几次输入,发生冲突时,后面就不需要继续操作了,只需要输入就行了。坑爹: 神之并查集!!!!做了这题对并查集了解更深了。而且本题也用到了异或的特性,a^b = 1 , b^c = 2 , 那么 a^c = 1^2 = 3一开始想的是,只要2个点不在同 阅读全文
posted @ 2013-08-24 17:06 pc.... 阅读(948) 评论(0) 推荐(0) 编辑