- 博客(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
原创 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关注的人