Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 430    Accepted Submission(s): 77 Problem Description "You know what?" Angel said, "There is a love-letter from me embeded on the lawn.…
hdu 5111 树上求交(树链剖分 + 主席树) 题意: 给出两棵树,大小分别为\(n1\),\(n2\), 树上的结点权值为\(weight_i\) 同一棵树上的结点权值各不相同,不同树上的结点权值可以出现重复 每次查询 \(u1\) \(v1\) \(u2\) \(v2\) 第一棵树上\(u1\) 到 \(v1\)的路径上所有结点权值组成的集合\(S1\) 第二棵树上\(u2\) 到 \(v2\)的路径上所有结点权值组成的集合\(S2\) 求\(S1\) 与 \(S2\) 的交集 \(1…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4717 思路:三分时间求极小值. #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> using namespace std; const int MAX_N = (300 + 30); const double e…
题目:http://acm.hdu.edu.cn/showproblem.php?pid=4548 Problem Description 小明对数的研究比较热爱,一谈到数,脑子里就涌现出好多数的问题,今天,小明想考考你对素数的认识. 问题是这样的:一个十进制数,如果是素数,而且它的各位数字和也是素数,则称之为“美素数”,如29,本身是素数,而且2+9 = 11也是素数,所以它是美素数. 给定一个区间,你能计算出这个区间内有多少个美素数吗?   Input 第一行输入一个正整数T,表示总共有T组…
题意:让你求的是由同一字母组成的最大子矩阵,w可以变成a或者b,x可以变成b或者c,y可以变成a或者c,z可以变成a或者b或者c. 分析:这是hdu 1506.hdu 1505的加强版,具体的分析看我的博客:http://www.cnblogs.com/jiangjing/p/3221423.html 代码实现: #include<stdio.h> #include<string.h> #include<stdlib.h> #include<iostream>…
题意:就是让你求出全由F组成的最大子矩阵. 分析:这是hdu 1506的加强版,只不过这道题变成了2维的,那我们就一行一行的来.具体的分析见1506的博客:http://www.cnblogs.com/jiangjing/p/3221423.html 然后做了这题之后,就可以做下这道题的加强版了:hdu 2870 代码实现: #include<iostream> #include<string.h> using namespace std; int n,m; ][]; ][],l[…
题意:容易理解... 分析:对于每个单位矩阵,我们先求出连续比它高的最左边的下标假设为l,然后求出比它高的最右边的下标假设为r,然后矩阵的面积就是(r-l+1)*1:我们从左到 右扫一遍,求出每个点的l保存在l[]数组里,然后从右到左扫一遍,求出每个点的r保存在r[]数组里,最后可以求出最大的矩阵了. 然后做完这个题可以做下这道题的加强版--hdu 1505 我的博客链接:http://www.cnblogs.com/jiangjing/p/3221442.html 代码实现: #include…
题目: 曹操在长江上建立了一些点,点之间有一些边连着.如果这些点构成的无向图变成了连通图,那么曹操就无敌了.刘备为了防止曹操变得无敌,就打算去摧毁连接曹操的点的桥.但是诸葛亮把所有炸弹都带走了,只留下一枚给刘备.所以刘备只能炸一条桥. 题目给出n,m.表示有n个点,m条桥. 接下来的m行每行给出a,b,c,表示a点和b点之间有一条桥,而且曹操派了c个人去守卫这条桥. 现在问刘备最少派多少人去炸桥. 如果无法使曹操的点成为多个连通图,则输出-1. 思路: 就是用tarjan算法算出桥的数量,再比较…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2196 思路:首先任意一次dfs求出树上最长直径的一个端点End,然后以该端点为起点再次dfs求出另一个端点,然后再次以求出的另一个端点为起点dfs,每次做dfs的时候都更新dist[](dist[u]表示u到树上任意节点的最远距离),可以证明树上任意某个节点到树上任意节点的最远距离的端点一定会是树上直径的两个端点之一. #include<iostream> #include<cstdio&g…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2460 思路:题目的意思是要求在原图中加边后桥的数量,首先我们可以通过Tarjan求边双连通分量,对于边(u,v),如果满足low[v]>dfn[u],则为桥,这样我们就可以知道图中桥的数目了.对于每一次query,可以考虑dfs树,树边肯定是桥,然后连上u,v这条边之后,就会形成一个环,这样环内的边就不是割边了,所以只要找到u,v的LCA,把这个路径上的桥标记为否就可以了. http://paste…