poj 3225 Help with Intervals
摘要:模版题,线段树区间赋值,反转,看别人代码敲的; 1 #include<stdio.h> 2 #include<string.h> 3 #define MAXD 132000 4 #define N 131070 5 int tree[4 * MAXD], rev[4 * MAXD], to[4 * MAXD], a[MAXD]; 6 void build(int cur, int x, int y) 7 { 8 int mid = (x + y) >> 1, ls = cur << 1, rs = (cur << 1) | 1; 9
阅读全文
posted @
2012-08-25 13:23
BFP
阅读(173)
推荐(0) 编辑
poj 2528 Mayor's posters
摘要:线段树+区间离散化:弄了好久,注意数组范围。 1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 #define MAXN 10000+100 5 6 int T, n, a[MAXN<<2], b[MAXN<<2], r[MAXN<<2], h[MAXN<<2], to[MAXN<<4]; 7 8 int cmp(const void *_p, const void *_q) 9 { 10 int *p = (int *)
阅读全文
posted @
2012-08-24 14:08
BFP
阅读(133)
推荐(0) 编辑
hdu 2795 Billboard
摘要:随着对线段树的认识,我的重点放在了,这个线段树里每个元素所代表的意义上了。这道题我们把每一层看作一个空间,随着往里面放广告,空间越来越小,而线段树所标示的意义就是剩余空间,通过像二分一样的去查找,将时间按复杂度降下来。 1 #include<stdio.h> 2 #include<string.h> 3 #define MAXN 220000 4 5 int h, w, n, D, tree[MAXN<<2]; 6 int max(int a, int b) 7 { 8 if(a > b) return a; 9 else return b;10 }1
阅读全文
posted @
2012-08-21 23:05
BFP
阅读(142)
推荐(0) 编辑
hdu 1394 Minimum Inversion Number
摘要:这道题一开始看题,没有什么思路,也是学习线段树以来第一次接触这样的题,后来通过查找资料了解到,这是线段树一个求逆序对的应用,通过学习这方面的知识,总结出可以将它转化为求区间和或者是求区间内1的个数这样一个基本的形式。这道题我们可以这样想,求逆序对也就是找后面的点比当前点小的这些点的个数的总和,另外我们也可以反过来找前面的点比当前点大的这些点的个数的总和。我用的后面的思路,可能会简单一些吧,每当输入一个值的时候,query一下,找到前面输入的比他大的点的总数,然后将此值赋值为1,updata一下。 1 #include<stdio.h> 2 #include<string.h&
阅读全文
posted @
2012-08-21 17:22
BFP
阅读(166)
推荐(0) 编辑
hdu 1754 I Hate It
摘要:线段树基础题: 1 #include<stdio.h> 2 #include<string.h> 3 #define INF 0x7fffffff 4 #define MAXN 800000 5 int N, M, D, tree[MAXN]; 6 7 int max(int a, int b) 8 { 9 if(a>b) return a;10 else return b;11 }12 13 void updata(int cur)14 {15 for(int i = (D+cur>>1); i^1; i >>= 1)16 tree[i]
阅读全文
posted @
2012-08-21 09:49
BFP
阅读(160)
推荐(0) 编辑
hdu 1166 敌兵布阵
摘要:线段树基础题: 1 #include<stdio.h> 2 #include<string.h> 3 #define MAXN 200000+100 4 5 int T, N, D, tree[MAXN], num; 6 char s[10]; 7 8 void updata(int cur, int j) 9 {10 for(int i = D+cur; i^1; i >>= 1)11 tree[i] += j;12 }13 14 int query(int x, int y)15 {16 int i = D+x-1, j = D+y+1,ans = 0;
阅读全文
posted @
2012-08-20 17:14
BFP
阅读(151)
推荐(0) 编辑
poj 2239 Selecting Courses
摘要:确定用二分图算法,就找好对应关系,本题对应关系为一周的所有课节N=7*12,和每一科的对应。 1 //1274,2239,2584,2536,2446 2 //http://wenku.baidu.com/view/9962910590c69ec3d5bb75da.html 贪心最大二分匹配 3 //匈牙利树和增广轨 4 5 #include <cstdio> 6 #include <cstring> 7 8 int used[610]; //是否在覆盖点中 9 10 int nmap[610][610];11 12 int path[610];//前一个13 14 i
阅读全文
posted @
2012-08-08 11:01
BFP
阅读(163)
推荐(0) 编辑
poj 1274 The Perfect Stall
摘要:二分图,匈牙利算法: 1 //1274,2239,2584,2536,2446 2 //http://wenku.baidu.com/view/9962910590c69ec3d5bb75da.html 贪心最大二分匹配 3 //匈牙利树和增广轨 4 5 #include <cstdio> 6 #include <cstring> 7 8 int used[610]; //是否在覆盖点中 9 10 int nmap[610][610];11 12 int path[610];//前一个13 14 int P,N;15 16 int cross(int k)17 {18
阅读全文
posted @
2012-08-08 10:39
BFP
阅读(185)
推荐(0) 编辑
poj 2186 Popular Cows
摘要:未完成,TLE要查: 1 #include<stdio.h> 2 #include<string.h> 3 #define MAXN 10000 + 10 4 5 int first[MAXN], next[50010],u[MAXN],v[MAXN],n, m, ans1; 6 int dfn[MAXN],low[MAXN],col[MAXN],stk[MAXN],ins[MAXN],ind,top,cols,tmp; 7 int outdg[MAXN],zeroout; 8 9 void dfs(int u)10 {11 dfn[u] = low[u] = ++in
阅读全文
posted @
2012-08-07 15:25
BFP
阅读(132)
推荐(0) 编辑
poj 1236 Network of Schools
摘要:强联通分量模版题,tarjan算法: 1 #include<stdio.h> 2 #include<string.h> 3 #define MAXN 110 4 5 int n, p, ans1, ans2, u[MAXN*MAXN], v[MAXN*MAXN], next[MAXN*MAXN], first[MAXN]; 6 int dfn[MAXN], low[MAXN], col[MAXN], stk[MAXN], ins[MAXN], ind, top, cols, tmp; 7 int indg[MAXN], outdg[MAXN], zeroin, zero
阅读全文
posted @
2012-08-07 10:12
BFP
阅读(184)
推荐(0) 编辑
poj 1258 Agri-Net
摘要:简单的模板题:prim算法适合浓密图: 1 #include<stdio.h> 2 #include<string.h> 3 #define MAXN 110 4 #define INF 100000000 5 6 int n, v[MAXN], low[MAXN], w[MAXN][MAXN]; 7 8 void solve() 9 {10 int ans = 0;11 memset(v,0,sizeof(v));12 v[0] = 1;13 for(int i = 1; i < n; i ++) low[i] = w[0]...
阅读全文
posted @
2012-08-05 12:40
BFP
阅读(150)
推荐(0) 编辑
poj 2485 Highways
摘要:用kruskal()算法处理》》。 1 #include<stdio.h> 2 #include<stdlib.h> 3 #define MAXN 300000 4 5 int T, n, h, u[MAXN], v[MAXN], w[MAXN], p[510], r[MAXN]; 6 7 int cmp(const void *_p, const void *_q) 8 { 9 int *p = (int *)_p;10 int *q = (int *)_q;11 return w[*p] - w[*q];12 }13 14 int find(int x){ret..
阅读全文
posted @
2012-08-04 11:11
BFP
阅读(124)
推荐(0) 编辑
poj 1789 Truck History
摘要:prim求最小生成树。 1 #include<stdio.h> 2 #include<string.h> 3 #define INF 100000000 4 #define MAXN 2100 5 6 int n, v[MAXN], low[MAXN], d[MAXN][MAXN]; 7 char s[MAXN][10]; 8 9 void prim()10 {11 int ans = 0;12 memset(v, 0, sizeof(v));13 v[0] = 1;14 for(int i = 1; i < n; i ++) low[i] = d[0][i...
阅读全文
posted @
2012-08-04 10:32
BFP
阅读(95)
推荐(0) 编辑
poj 2240 Arbitrage
摘要:又是套汇为题,初始化d数组为1就可以了,用bellman—ford算法。 1 #include<stdio.h> 2 #include<string.h> 3 4 int n, m, num, u[2000], v[2000]; 5 double w[2000], d[50], ra; 6 char s[50][100], s1[100], s2[100]; 7 8 void solve() 9 {10 for(int i = 0; i <= n; i ++) d[i] = 1;11 for(int k = 0; k < n-1; k ++)12 for(i
阅读全文
posted @
2012-08-03 15:19
BFP
阅读(120)
推荐(0) 编辑
poj 1125 Stockbroker Grapevine
摘要:用floyd算法求出任意两点之间的距离,然后从一点出发找到其他点的最大的距离,找从所有点出发到其他点里的最大距离这一集合的最小值,就是所求.#include<stdio.h>#include<string.h>#define MAXN 110int n, m, d[MAXN][MAXN];int main(){ while(scanf("%d",&n)) { if(n == 0) break; memset(d,0x3f,sizeof(d)); for(int i = 1; i <= n; i ++) { ...
阅读全文
posted @
2012-08-03 13:22
BFP
阅读(122)
推荐(0) 编辑
poj 2253 Frogger
摘要:这道题我是用并查集处理的,将所有边排序,当生成树里出现第一个点,第二个点时(或第0点第1个点),结束并查集,输出已处理边里的最大值就可以了。 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<math.h> 4 #define MAXN 210 5 int n,g,h,u[MAXN*MAXN],v[2*MAXN*MAXN],p[MAXN],r[2*MAXN*MAXN]; 6 double x[MAXN],y[MAXN],w[2*MAXN*MAXN],flag[2*MAXN*MAXN]; 7 8 int c
阅读全文
posted @
2012-08-03 11:23
BFP
阅读(161)
推荐(0) 编辑
poj 1062昂贵的聘礼
摘要:弄了好长时间,终于找到错误了,原来地位可以为0,另外建立的可能是非连通的图,切记。#include<stdio.h>#include<string.h>#define INF 10000000#define MAXN 110int m,n,N,mi,ans,p[MAXN],rank[MAXN],w[MAXN][MAXN], d[MAXN], vis[MAXN];void solve(int u, int v){ memset(vis, 0, sizeof(vis)); ans = INF; for(int i = 0; i <= n; i ++) d[i] = I
阅读全文
posted @
2012-08-03 09:33
BFP
阅读(167)
推荐(0) 编辑
poj 3259 Wormholes
摘要:和poj 1860差不多都用bellman—ford最简单的版本就可以了,关键在于巧妙的运用,做过了才能更好地理解》#include<stdio.h>#include<queue>#include<string.h>#define INF 100000000#define MAXN1 520#define MAXN 8000int u[MAXN],v[MAXN],wt[MAXN], d[MAXN1];int n, m, w, T,p;void init(){ scanf("%d%d%d",&n,&m,&w); p
阅读全文
posted @
2012-08-02 16:02
BFP
阅读(150)
推荐(0) 编辑