- 博客(13)
- 资源 (7)
- 收藏
- 关注
原创 sicily 1876. Basic Graph Problem 线段树+并查集+路径压缩
线段树或者RMQ都可以做,虽然是不是动态变化的,但是用线段树做也不错,,而且最近才开始弄线段树,当练练手。。。一定要路径压缩的并查集,,不然线性的话,耗时过高。。。而且不能写递归的路径压缩,我猜得。。。因为n#include#include#includeusing namespace std;int n;int w[100100];struct node{
2012-02-16 01:02:56 1011
原创 【转】并查集路径压缩
使用并查集查找时,如果查找次数很多,那么使用朴素版的查找方式肯定要超时。比如,有一百万个元素,每次都从第一百万个开始找,这样一次运算就是10^6,如果程序要求查找个一千万次,这样下来就是10^13,肯定要出问题的。 这是朴素查找的代码,适合数据量不大的情况:int findx(int x){ int r=x; while(parent[r] !=r) r=
2012-02-16 00:47:33 15058 6
原创 sicily 1686 Happy Children‘s Day
线段树,第一次用。。。参考代码写#include#include#includeusing namespace std;int max(int a,int b){return a}struct node{int left;int right;int most;int rest;int index;}seg[200010];int w[10
2012-02-15 03:15:40 640
原创 POJ 2503 Babelfish
题目大意很简单,就是给你字典的对应信息,然后给你查询条件要求你输出字典查询结果,如果字符串没有在字典中则输出"eh"。#include#include#include#include#includeusing namespace std;map mp;char str[100];char source[12];char d[1000010][12];i
2012-02-10 22:05:56 398
原创 3169 Layout
简单的差分约束看错成一个图,dis[B]-dis[A]=W,然后求出图的最短距离,用bellman-ford算法就可以了判断图是否有负环,输出-1,否则判断n和1是否可达,如果不行输出-2.否则输出最短距离。#include#include#include#include#includeusing namespace std;const int N =1010;
2012-02-09 18:38:21 431
原创 poj 2983Is the Information Reliable?
差分约束用SPFA判断是否存在负数环 p的时候就是就是dis[B]- dis[A]>=w,dis[B]-dis[A]=dis[A]+1题目虽然没说A,B是1-n但是按照这样做过了。。。- -!!如果要的话,就hash一下呗code:#include#include#include#include#include#includeusing namespace s
2012-02-09 13:49:27 489
原创 差分约束
看了网上一下内容,整理出来供大家参考,其实想想最小值怎么写,求最大值怎么写,这个我觉得蛮有意思的。1.问题定义 差分约束系统属于线性规划问题。在一个差分约束系统中,线性规划矩阵A的每一行包含一个1和一个-1,A的所有其他元素都为0。因此,由Ax≤b给出的约束条件是m个差分约束集合,其中包含n个未知元。每个约束条件为如下形式的简单线性不等式:xj-xi≤bk(1≤i, j≤n,1≤k≤
2012-02-08 20:59:06 5641 1
原创 SPFA算法 poj 1364
求单源最短路的SPFA算法的全称是:ShortestPath Faster Algorithm。 最短路径快速算法-SPFA算法是西南交通大学段凡丁于1994年发表的。适用范围:给定的图存在负权边,这时类似Dijkstra等算法便没有了用武之地,而Bellman-Ford算法的复杂度又过高,SPFA算法便派上用场了。我们约定有向加权图G不存在负权回路,即最短路径一定存在。当然,我们可以在执行该
2012-02-08 20:56:51 897
原创 poj 3264
转自大牛分析:RMQ(RangeMinimum/Maximum Query)问题: RMQ问题是求给定区间中的最值问题。当然,最简单的算法是O(n)的,但是对于查询次数很多(设置多大100万次),O(n)的算法效率不够。可以用线段树将算法优化到O(logn)(在线段树中保存线段的最值)。不过,Sparse_Table算法才是最好的:它可以在O(nlogn)的预处理以后实现O(1)的查询
2012-02-06 15:39:27 536
原创 sicily stick
两个数异或之后为0#include#includeusing namespace std;int main(){int n;while(scanf("%d",&n),n){ int s = 0; int tmp; for(int i = 0;i scanf("%d",&tmp); s^=tmp;
2012-02-06 14:39:08 429
原创 sicily 1195. Summation
用一个数组c[i][j]统计第i位,数字j出现的次数计算数据段[x,y]等价于计算数据段([0,y]-[0,x-1]+m)%m最高位为s[n-1],1---s[n-1]-1个出现M^n-1次,s[n-1]出现x%M^n-1+1次,其余低位各个位置上的每个数字在该位出现s[n-1]*M^n-2次其他位类似。。。。从高往低算。#include#include#include
2012-02-06 10:55:18 483
原创 poj Number Sequence
主要先大概确定数的范围,才26368左右,可以先枚举到i总共有多少个数字,然后确定最后一个数。。。#include#include#include#include#includeusing namespace std; long long a[100001]; long long d[100001];int f(int n){int k = 0;whi
2012-02-04 22:35:07 510
原创 poj 1015Jury Compromise
为叙述问题方便,现将任一选择方案中,辩方总分和控方总分之差简称为“辩控差”,辩方总分和控方总分之和称为“辩控和”。第i 个候选人的辩方总分和控方总分之差记为V(i),辩方总分和控方总分之和记为S(i)。现用f(j, k)表示,取j 个候选人,使其辩控差为k 的所有方案中,辩控和最大的那个方案(该方案称为“方案f(j, k)”)的辩控和。并且,我们还规定,如果没法选j 个人,使其辩控差为k,那么
2012-02-04 11:03:13 363
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人