摘要:
给定一个简单无向有权图,求其最小生成树的个数。在我们用Kruskal计算最小生成树时,由于相同权值的边选择的顺序是随机的,所以我们最小生成树就也许有很多。对于同一权值的边,我们不论用什么顺序“扫过”,最终的得到的无向森林的连通性一定是一样的,即对后面的边是否加入的影响也是一样的,所以可以根据这一点将... 阅读全文
摘要:
水。 1 /************************************************************** 2 Problem: 1015 3 User: idy002 4 Language: C++ 5 Result: Accepted... 阅读全文
摘要:
求同一字符串的两个后缀的最长公共前缀。将字符串按位置放到Splay中维护(每个节点还维护一下该子树的hash),然后二分前缀的长度,用splay计算出指定范围的hash,按hash是否相等来判断是否相同。 1 /*******************************************... 阅读全文
摘要:
将二维求圆心的方式推广到n维,然后用高斯消元解。具体来说就是,设圆上的两点A(a1,a2,...,an), B(b1,b2,...,bn)和圆心C(c1,c2,...,cn),则∑(ai-ci)2 = ∑(bi-ci)2∑2*(ai-bi)*ci=∑(ai2-bi2)总共有n+1个点,有C(n+1,... 阅读全文
摘要:
水。。。 1 /************************************************************** 2 Problem: 1012 3 User: idy002 4 Language: C++ 5 Result: A... 阅读全文
摘要:
我的第二道斜率DP。收获: 1、假设两个位置:p)的方向就会因为f的大小关系而变化,就没有凸的性质了。 2、斜率优化很难调试,所以当发现暴力DP和同样的方程被斜率优化了一下的答案不同时,不要去调试,直接去检查上面的各个函数是否写错或抄到代码中抄错了, 或者重推一遍。(注意决策点是否可能会重... 阅读全文
摘要:
我的第一道斜率优化。就这道题而言,写出原始的方程: dp[i] = min{ dp[j] + (sum[i]-sum[j])2 + M | j in [0,i) }O(n^2)的复杂度肯定超时,要么优化转移,要么重写方程。斜率优化的思想就是减少不必要的枚举(即不枚举肯定不会成为决策点的j)。我们考... 阅读全文
摘要:
原来的DP:dp[i][j]表示长度为i的合法串,并且它的长度为j的后缀是给定串的长度为j的前缀。转移:i==0dp[0][0] = 1 dp[0][1~m-1] = 0i>=1dp[i][0] = dp[i-1][0]*10-dp[i-1][m-1]dp[i][1] = dp[i-1][0]-(a... 阅读全文
摘要:
正难则反前面定后面就定->枚举开头 1 /************************************************************** 2 Problem: 1008 3 User: idy002 4 Language: C++ 5 R... 阅读全文
摘要:
本题就是求半交平面的交包含哪些直线,而且有点特殊(一般的半交平面用双端队列,因为可能转到最开始的直线,但本题不会,所以只需要一端操作就行了)。 1 /************************************************************** 2 Proble... 阅读全文