自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(51)
  • 收藏
  • 关注

原创 poj 2771 Guardian of Decency----二分图求 最大覆盖集

二分图求 最大覆盖集。。•把人抽象成点,两个人很可能在一起则在他们之间连一条边。•同性别不怎么可能在一起,故这是一个二分图。•选尽可能多的点,使得选的点之间无边。•最大独立集。#include#include#includeusing namespace std;bool edge[510][510],visited[510];int cx[510],cy

2013-07-29 14:36:32 542

原创 poj 1325 Machine Schedule---二分图求最小顶点覆盖

二分图求最小顶点覆盖。。注意本题说,机器开始在0开始,所以就是默认和0相连的job已经被完成了,所以我是从1开始扫的点正常的话,要将edge【】【】和0相连的边值赋为0,表示该job已经被完成。。。#include#includebool edge[110][110],visited[110];int cx[110],cy[110];int n,m,k;i

2013-07-29 11:00:08 523

原创 poj 1469 COURSES----二分图

二分图的最大匹配,模板。。#include#includebool edge[110][310],visited[310];int cx[110],cy[310];int n,m;int path(int u){ int v; for(int v=1;v<=m;v++) if(edge[u][v]&&!visited[v]){ visited[v]

2013-07-29 10:27:36 527

原创 POJ 2299 Ultra-QuickSort ---归并排序 求逆序

归并排序 的模板。能求逆序。。。。#include#includeint n;long long a[500005],b[500005];long long sum;void merge(int l,int m,int r){ int i=l,j=m+1,k=0; while(i<=m && j<=r) { if(a[i]<=a[j]) b[k++]

2013-07-28 19:24:58 485

原创 POJ 3468 A Simple Problem with Integers----线段树

第一次写线段树啊,当模板用的以后。。。#includeusing namespace std;struct node{ node *pleft,*pright; int L,R; long long lnc; long long nsum;};node tree[1000000];int ncount=0;int mid(node *p){ retu

2013-07-28 10:51:59 512

原创 poj 4607 Park Visit --2013多校联合赛第一场---1008

解题报告:首先如果 k 小于等于直径长度,那么答案为k−1。 如果 k 大于直径长度,设直径长度为 r,那么答案为r−1+(k−r)∗2。 先找树的最长路;找树中任意一点,dfs找该点所能达到的最远的点vv,然后从vv点dfs找树的最长路。。#include#include#include#includeusing namespace std;int t

2013-07-25 11:36:02 691

原创 最长上升子序列----nlogn算法-模板

#include#include#includeusing namespace std;const int MAX=100010;int a[MAX],dp[MAX],d[MAX];int n;int find(int r,int p){ int l=1,m; while(l<=r){ m=(l+r)>>1; if(d[m]<p) l=m+1; else

2013-07-24 22:18:16 615

原创 poj 4604 Deque-----2013多校联合赛第一场--1005

做了一天,终于做出来了。。结题报告:考虑题目的一个简化版本:使双端队列单调上升。对于序列 A 和队列 Q,找到队列中最早出 现的数字Ax,则Ax将 Q 分成的两个部分分别是原序列中以Ax开始的最长上升和最长下降序 列,答案即为这两者之和的最大值。而对于本题,由于存在相同元素,所以只要找到以Ax 为起点的最长不下降序列和最长不上升序列的和,然后减去两个里面出现Ax次数的最小值 即可。

2013-07-24 20:28:49 560

原创 快速幂 ---模板

快速幂模板int quickpow(int m,int n,int k){ int b =1; while (n > 0) { if (n &1) b = (b*m)%k; n = n >>1 ; m = (m*m)%k; } return b;}

2013-07-24 09:34:24 466

原创 最长上升子序列 ---模板

#include#includeint n;int p[100000];int dp[100000];int main(){ int i,j,k; while(scanf("%d",&n)!=EOF){ for(i=1;i<=n;i++) scanf("%d",&p[i]); memset(dp,0,sizeof(dp)); dp[1]=1; int max

2013-07-23 23:15:55 509

原创 c++高精度模板

#include #include #include #include #include #include #include #include using namespace std; const int maxn = 1000; struct bign { int len, s[maxn]; //s是逆序

2013-07-23 10:59:32 875

原创 uva 11375 - Matches

本题要用高精度,表示不会,上网找的高精度模板。。。本题dp【i】表示用i个火柴所能组成的数的个数,核心代码: for(i=1;i<=9;i++)//0不能当第一个数,所以没赋初值 dp[a[i]]=dp[a[i]]+one;//先赋初值,one是高精度的1. for(i=1;i<=2000;i++) for(j=0;j<=9;j++) dp[i+a[j]]=dp[i+a

2013-07-23 10:45:42 656

原创 poj 1113 Wall-----凸包

凸包问题。先按 y 坐标排序,y一样的按 x 排序。取p【0】为开始点,每个点与开始点相连,按x轴正方向,每条线段与x轴的夹角 由小到大排序。然后选点求距离。。。本题求凸包的边长+以L为半径的园的周长。#include#include#include#include#includeusing namespace std;int n;double r;int s

2013-07-23 01:32:42 561

原创 10408 - Farey sequences - UVa

题目要求:给定一个数n,求1—n之间有多少对互质的数,phi【i】数组表示i之前有多少个和i互质的数,a【i】表示前phi【1】+phi【2】+……+phi【i】;a【n】数组就是1---n之间互质的数的对数。。#include#includelong long a[1000010],phi[1000010];long long n,i,j;int main()

2013-07-22 16:29:59 712

转载 UVA 11426 GCD - Extreme (II)

http://www.cnblogs.com/staginner/archive/2012/10/29/2745135.html

2013-07-22 14:58:51 546

原创 UVA1146 Now or later

2-SAT问题。详见:http://blog.csdn.net/qhpeklh5959/article/details/8991949#include#include#include#include#includeusing namespace std;int dfn[4040],low[4040],f[4040],ceng[4040];vector q[4040]

2013-07-18 19:18:39 554

原创 tarjan 求强连通分量

void Tarjan(int u){ dfn[u]=low[u]=ntime++; z.push(u); f[u]=1; int i,v; for(i=0;i<q[u].size();i++) { v=q[u][i]; if (!dfn[v]) { Tarjan(v); low[u] = min(low[u], low[v]); } else

2013-07-17 00:29:45 609

原创 POJ 2186-Popular Cows ---强连通分量

本题让求有多少点  是图中所有点都可到达改点的定理:在一个有向图中,如果有一个节点的出度为0,并且仅有一个这样的点,则该图中所有的点都可到达该点先求出图的强连通分量,然后将每个强连通分量化为一个层次,求是否存在一个强连通分量,该分量的出度为一,并且仅有一个这样的分量,则该连通分量中的点都是满足条件的,输出该连通分量的点的个数;如果不存在,则输出0;#include#inclu

2013-07-16 23:54:07 547

原创 poj 2117 Electricity--割点

割去一个点,问图中还剩的最大分支数找一个割点,使去掉该割点后,图中分支数最大1.当图中没有边时,分支数为点的个数n,减去1,即n-1;2.最大分值数为,ans-1+mx,ans为原图的分支数,mx为去掉某个原图分支上的割点后,该分支的变成分支数#include#include#include#includeusing namespace std;int dfn[

2013-07-15 15:43:19 497

原创 POJ 1523 SPF 割边与割点

本题要求出割点,并算出每个割点将图分成几个分支。用tarjan算法求的割点,然后对每个割点,dfs求有多少个分支每点的数是不一定的,我用的set存的点,vector存的图求多少个分支就是:如果i是割点,就对与i相连的点的分支进行dfs标记,假如与i相连的第j个点标记完了,标记第j+1个点时,发现j+1点标记过了,则j+1点和之前的某点在同一分支上,则不 sum++;大概就是这样

2013-07-14 13:08:35 551

原创 poj 1182 食物链---带权值的并查集

这题就一组数据,用while(scnaf(“%d%d”,&n,&m)!=EOF)..就wa了,我wa了数次,无语了。。带权值的并查集,d[]数组存的是每个点和根节点的关系,同类为d[i]=0;  根节点 吃 i点为d[i]=1;  i点吃根节点为d[i]=2;自己画图感受一下吧!!#include#include#includeint f[50050],d[50050];

2013-07-13 22:55:13 676

转载 UVA-11865 - Stream My Contest(最小树形图)

转自:http://www.cnblogs.com/arbitrary/archive/2013/02/17/2915073.html题意:你需要花费不超过cost元来搭建一个比赛网络。网络中有n台机器,编号0~n-1,其中机器0为服务器,其他机器为客户机。一共有m条可以使用的网线,其中第i条网线的发送端是机器ui,接收端是机器vi(数据只能从机器ui单向传输到机器vi),

2013-07-13 19:44:53 761

原创 HDU 1325 Is It A Tree? ---树

du[]数组 记录每个点的入度。最后扫一下所有图上的点,如果只有一个点的入度为0,并且其他点的入度不大于2(就是都等于1),则此图是一个树#include#include#includeusing namespace std;int du[100000];int vis[100000];int main(){ int i,j,k; int n,m; int m

2013-07-13 15:25:10 423

原创 POJ 1861 Network ---最小生成树

求最小生成树,然后输出。。#include#include#includeusing namespace std;int n,m;struct node{ int a,b,len;}p[15500];int f[1010];int root(int p){ if(f[p]==-1) return p; else return f[p]=root(f[p]);

2013-07-13 14:42:58 520

原创 POJ 3469 Dual Core CPU---dinic求最大流

源点s连接 每个点,权值为Ai,此点在连接汇点t,权值为Bi;之后点 每组输入的 两点 连接无向边,即正向边和反向边都存权值。求最小割,即最大流,即为答案自己画图感受一下吧!!#include#include#include#include#includeusing namespace std;int n,m;int ans,res;struct node{ i

2013-07-11 01:09:35 613

原创 POJ 2987 Firing---dinic求最大流

正值点为S集,负值点为T集,源点s连接S集,T集连接汇点t;建立二分图,求最大流,用正值的和减去最小割(最大流),即为所求正值点代表开除,负值点代表 不被开除。如果有通路,则表示上司被开除,但下属没被开除,显然不成立,所以要求最小割,即最大流画图感受一下吧!!这题一些定义要用long long,不然会wa#include#include#include#include#

2013-07-11 00:59:57 570

原创 HDU 1233 还是畅通工程---prim求最小生成树

一前一直用kruskal算法,刚学的prim,找道水题练练手。。prim的模板。。#include#include#includeusing namespace std;int map[110][110],f[110],d[110];int n,sum;void prim(){ int i,j,k; sum=0; memset(f,0,sizeof(f)); f[1

2013-07-11 00:26:08 647

原创 PO J3308-Paratroopers---网络流

构建一个二分图,行坐标为S点集,纵坐标我T点集。令s=0,连接所有S,t=n+m+1,所有T连接t。求此二分图的最小割,即最大流。乘法需要 转换为 log()在求和,最后exp()回来#include#include#include#include#includeusing namespace std;int n,m,l;double cap[110][110]

2013-07-10 01:47:11 870

原创 POJ 3080 Blue Jeans----kmp

此题就是枚举 第一个字符串的 子串,判断是否其他的字符串里,也有这个子串,然后挑出长度最长的子串注意:如果子串长度相同,输出字典序小的子串。。#include#include#includechar p[11][66];int next[66];char y[61];void getnext(char *a){ int k=-1,j=0; next[0]=-1;

2013-07-10 01:32:46 589

原创 POJ 2185 Milking Grid---kmp

http://blog.sina.com.cn/s/blog_69c3f0410100tyjl.html这个博客讲的非常好,这道题我感觉就是有问题,上面博客将了,网上一般的 两种做法,但都是错的,但在poj上都能过,他说的我没看懂,就编了个求最小公倍数的水过了1_1#include#include#includechar p[10040][80];int ne

2013-07-10 01:26:34 527

原创 POJ 3461 Oulipo---kmp

求母串里有多少个子串。。#include#include#includechar p[1000050],s[1000050];int next[1000050];int n1,n2;void getnext(){ int k=-1,j=0; next[0]=-1; while(j<n1){ if(k==-1 || p[k] == p[j]){ k

2013-07-10 01:19:38 508

原创 poj 2752 Seek the Name, Seek the Fame---kmp

Sample InputababcababababcababaaaaaSample Output2 4 9 181 2 3 4 5样例一:前2个和后2个一样,前4个和后4个一样,前9个和后9个一样,前18个 和后18个一样可以发现规律,next[18]=9; next[9]=4; next[4]=2; next[2]=0;所以写

2013-07-10 01:09:55 525

原创 poj 1273 Drainage Ditches---EK求最大流

EK求最大流EK算法的模板。。#include#include#include#includeusing namespace std;int cap[220][220],flow[220][220],a[220],pre[220];int m,f;int KE(int s,int t){ queue q; memset(flow,0,sizeof(flow));

2013-07-10 00:47:02 620

原创 poj 1961 Period---kmp

和poj 2046一样,多加了一维http://blog.csdn.net/u010489389/article/details/9271843#include#include#includechar p[1000050];int next[1000050];int n;void getnext(){ int k=-1,j=0; next[0]=-1

2013-07-08 15:14:33 527

原创 poj 2406 Power Strings---kmp

首先弄明白next[]数组的意义,next[i]表示 第i个数的前 L 个字符串等于 后 L 个数的字符串;例如:字符串   abcabcdanext[0]=-1; next[1]=0;   anext[2]=0;   abnext[3]=0;   abcnext[4]=1;   abca,next[5]=2;   abcab,next[6]=3;   abcabc

2013-07-08 15:01:02 529

原创 poj 3159 Candies------spfa算法

数据结构中对于稀疏图的定义为:有很少条边或弧(如e这题是稠密图,所以spfa算法要用stack,,,如果是稀疏图 ,则用queue。静态邻接表+spfa。#include #include #include #include #include #include #include#define INF 30010using namespace std; st

2013-07-06 17:08:15 597

原创 poj 1511 Invitation Cards ----spfa算法

spfa算法用vector 写得邻接表  会 TLE,只好用静态邻接表spfa求出1点到各个点的 最小距离,,图 反着存,用spfa 就能求出 各个点到1点的最小距离。。(好神奇!)first[i] 数组 存 i点连出的边的最后一条边的编号  例如有图:(1)1---3,   (2) 2---3,(3) 3----4, (4)1-----4,  一共4条边,最终first[1] = 4

2013-07-06 14:08:49 589

转载 SPFA算法

http://www.cnblogs.com/devtang/archive/2011/08/25/spfa.html

2013-07-05 22:18:10 503

原创 HDU 1011 Starship Troopers---树形dp+有依赖的背包

dp[i][j]表示 用i 个士兵 在j为根节点的 最大值#include#include#include#include#includeusing namespace std;struct node{ int a,b;}p[110];vector q[110]; //用vector存 邻接表int dp[110][110],f[110],m;void df

2013-07-05 20:31:13 596

原创 HDU 1081 To The Max ---二维dp

给一段数列,求连续数列 和的最大值,此题是二维的,将 i行到 j行 相加,转换为一行了,就是一维的了#include#include#includeusing namespace std;int p[110][110],b[110];int n;int com(int *b) //算一维的 函数{ int i,j,k,sum=0,max=-1

2013-07-05 13:54:00 497

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除