- 博客(10)
- 收藏
- 关注
原创 HDU 3671 Boonie and Clyde (tarjan+割点变形)
思路:此题不是一般的求割点,而是求去掉一对点之后能否让图分开,即割点对(我这造词能力,满分)对于第一个点我们只能枚举,但是对于第二点却不必暴力枚举考虑经过删减第一个点之后的图,如果删去这个点之后剩下了一个部分,那么我们对这张图tarjan求割点,然后加入结果就好了。如果剩下了2个部分,那么考虑这两个部分中的点的个数,如果两个部分中的点都是1个,那么对结果没有贡献。如果只有一个部分是1个点,那么
2017-04-30 14:10:04 486
原创 POJ 2186 popular cows (tarjan + 缩点)
思路:有向图,边具有传递性。我们要找的是这样的点:这个点被其他所有的点所直接或传递指向,即这个点是所有牛所崇拜的。通过对数据的观察,直接否决了暴力的可能性。因为要暴力传递性,所以至少要 n3n^3 的复杂度。首先我们考虑图中存在的强联通分量,对于强联通分量中的点,每个点都能通过传递性到达此联通分量中的任何一点,即可以将这个强联通分量视为一个点(缩点),而这个点的出边即连向其他的缩点。考虑经
2017-04-29 22:26:57 86
原创 HDU 1269 迷宫城堡(tarjan强联通分量)
思路:tarjan求强联通分量个数代码:#include <iostream>#include <cstdio>#include <algorithm>#include <string.h>using namespace std;int ans;//代表着强联通分量的个数//链式前向星const int maxn = 10010;//最大的点的个数int head[maxn];stru
2017-04-29 19:04:47 262
原创 HDU 4417 Super Mario (树状数组)
思路:首先我们先回顾一下树状数组。树状数组的的直接目的即区间求和(logn)。但由于具有logn单点修改的功能使得区间求和更为方便。对于这道题来说,我们先对m个询问中的h升序排序,利用了<=h1的元素一定也<=h2这个递推式,然后将n个数也排序,但同时需要记录这些数原本的位置信息。对于每个询问,我们将符合hi条件的点加入树状数组,注意,我们是将这个点原来的位置加入树状数组(数量是1)。这样构造
2017-04-29 14:19:43 280
原创 HDU 4414 Finding crosses(爆搜)
思路:枚举十字路口中心的位置。判断上下左右是否分别满足条件。#include <iostream>#include <cstdio>#include <string.h>#include <cmath>#include <map>#define eps 1e-9typedef long long int lli;using namespace std;int ma[60][60];c
2017-04-23 20:00:03 249
原创 HDU 4405 Aeroplane chess(dp)
思路:概率dp 相同的局势的期望一样。 所以从后向前推。#include <iostream>#include <cstdio>#include <string.h>#include <cmath>#define eps 1e-9typedef long long int lli;using namespace std;int fl[100100];double dp[10010
2017-04-23 10:50:00 75
原创 HDU4586 Play the Dice (期望)
思路:假设这样一组样例, 6 1 2 3 4 5 6 1 3 设当前的期望为ans,可以很自然的得到这个式子 ans=1/6(1+2+4+5+6)+1/6(3+ans) ans = 1/6 (1+2+4+5+6) + 1/6(3+ans) 即:六分之一的概率扔到3,并且在扔一回,然而这时候我们会面对跟现在一样的状态,所以期望是一样的。所以解方程即可。坑点:1,n和m相等时不能直接除,会
2017-04-15 21:22:07 230
原创 HDU 4596 J - Yet another end of the world(数论)
题意:给你n个 xix_i,yiy_i,ziz_i,让你判断是否存在一个数num, 满足形如下式的条件,满足的话则代表此飞船在这个虫洞的作用力下,那么这个num号飞船不能再同时再处于另一个冲动的引力下,否则会被潮汐力撕碎。。。现在问你是否有被撕碎的危险。 y<=num(modxi)<=z y <= num(mod x_i) <= z思路:遍历两两组合的全部。对于任意的两个有如下的特点。 numm
2017-04-15 20:49:25 304
原创 CodeForces - 544C (完全背包)
思路:dp[i][j][k] = n; 表示第i个人,写了j行代码,有k个bug的有方案数n。 dp[i][j][k] = dp[i-1][j][k](这个人没写代码) + dp[i-1][j-1][k-a[i] ](这个人写代码和bug了); 注意初始条件。#include <iostream>#include <cstdio>#include <string.h>typedef lon
2017-04-15 11:02:34 514
原创 CF 404 div2 (思路题 推公式 精度)
题目连接思路:当n小于m时,每天都必补满,所以直接输出第n天即可。 当n大于m时,比如第m+1天,此时剩下的是n-m,之后每天则是递减1,2,3,4,5。。。一个等差数列(因为是先增m再减,所以每天就相当于直接减一个xx-m)。 代码:#include <iostream>#include <cstdio>#include <string.h>#include <queue>#incl
2017-04-02 19:06:06 327
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人