模板
文章平均质量分 66
A_Happyer
这个作者很懒,什么都没留下…
展开
-
acm 求组合数方法
做题需要用到组合数,搜集了一些方法原创 2014-07-24 10:16:12 · 1810 阅读 · 1 评论 -
POJ-3207-Ikki's Story IV - Panda's Trick(2-sat模板)
2-sat模板提。代码:#include#include#include#include#include#include#include#include#define rep(i,a,b) for(int i=(a);i<(b);i++)#define rev(i,a,b) for(int i=(a);i>=(b);i--)#define clr(a,x) memset原创 2014-12-02 13:54:36 · 655 阅读 · 0 评论 -
ZOJ Problem Set - 3795(缩点拓补)
题意:每条信息说明了两个一定不在一个集合里的人,求最少情况集合可以划分为多少子集。一看就是拓补树的最高层数,但题意中隐含了可能有环(>=关系偏序),所以要先缩点,再拓补。当然,缩点之后图中没有环,直接dfs记忆化也是ok的。代码:#include#include#include#include#include#include#include#include#define原创 2014-12-02 12:49:00 · 690 阅读 · 0 评论 -
poj2299(离散化+树状数组求逆序)
数据范围比较大,先用离散化将数据映射到可控的范围,然后应用树状数组求逆序求解。总共有N个数,如何判断第i+1个数到最后一个数之间有多少个数小于第i个数呢?不妨假设有一个区间 [1,N],只需要判断区间[i+1,N]之间有多少个数小于第i个数。如果我们把总区间初始化为0,然后把第i个数之前出现过的数都在相应的区间把它的值定为1,那么问题就转换成了[i+1,N]值的总和。再仔细想一下,区间原创 2014-12-21 16:28:21 · 642 阅读 · 0 评论 -
poj1804(归并排序求逆序数)
逆序数,也就是说,对于n个不同的元素,先规定各元素之间有一个标准次序(例如n个 不同的自然数,可规定从小到大为标准次序),于是在这n个元素的任一排列中,当某两个元素的先后次序与标准次序不同时,就说有1个逆序。一个排列中所有逆序总数叫做这个排列的逆序数。我们移动元素的次数转化为,假如对每个数da[i]来说前面比他大的数的数目为c[i]的话,那么移动元素总次数就应该是c[0]+c[1]+……+原创 2014-12-22 12:46:43 · 1508 阅读 · 0 评论 -
POJ3177 Redundant Paths (双联通缩点)
求对于给定一个连通图,加多少条边可以变成边双连通图。一个有桥的连通图要变成边双连通图的话,把双连通子图收缩为一个点,形成一颗树。需要加的边为(leaf+1)/2 (leaf为叶子结点个数)。对于此题,有重边但重边不加入计算。重边的话,要么在开始去掉,要么用桥来计算入度。因为桥不属于任何一个边双连通分支,其余的边和每个顶点都属于且只属于一个边双连通分支。对于重边而言,只有一对原创 2014-12-22 20:06:05 · 715 阅读 · 0 评论 -
HDU4685 Prince and Princess 完美匹配+强连通
题意:现在有n个王子,m个公主。现在要给他们配对,王子会和他喜欢的一个人结婚,而公主不能做选择。这题啃得好费劲,有个类似的题目poj1904,那个题目也是给王子与公主配对,但那个是王子公主各n个,且给定了一个完美匹配,然后求每个王子可以做出的选择且不影响最大匹配数目。那题是先建各条喜欢关系的边,然后在由被选择的公主连一条边到与之配对的王子,强连通之后如果一个王子和一个公主在一个强连通分量中,那原创 2014-12-18 23:26:15 · 993 阅读 · 0 评论 -
康拓展开与逆康拓展开原理及实现
1.康托展开的解释康托展开就是一种特殊的哈希函数 把一个整数X展开成如下形式: X=a[n]*n!+a[n-1]*(n-1)!+...+a[2]*2!+a[1]*1! 其中,a为整数,并且0 {1,2,3,4,...,n}表示1,2,3,...,n的排列如 {1,2,3} 按从小到大排列一共6个。123 132 213 231 312 321 。原创 2014-12-23 23:49:52 · 1238 阅读 · 0 评论 -
hdu4612(双联通缩点+求树的直径)
求在给定图中添加一条边最多能是多少条桥消失。双联通缩点,成为一棵树,然后求树的直径。此图中两点之间可能会有重边,也按双联通,而不能按桥处理。其他的就没什么特别的代码:#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#include#include#include原创 2014-12-22 16:52:54 · 647 阅读 · 0 评论 -
线段树求区间和模板
#include#include#include#define MAX 105000#define lson s,mid ,n<<1#define rson mid+1,e,n<<1|1using namespace std;int tree[MAX<<2];int c[MAX];int want(int a,int b){ if(a%b) {原创 2014-08-28 19:56:47 · 496 阅读 · 0 评论 -
poj 3694 Network(桥+lca)
给定一个无向无环图,保证连通,求每加入一条给定的边图中还剩下多少桥。双联通缩点重新建图后,再用lca在线算法解。lca算法参考斌神http://www.cnblogs.com/kuangbin/p/3184884.html这个版本的lca思路大致是先topsort,再用并查集分别从查询的两点向根节点回溯,直到两个点碰撞。效率我分析不出来,但看得出效率很高,每次查询都对后面查询做原创 2014-12-28 11:34:18 · 792 阅读 · 0 评论 -
POJ1144-Network(割顶模板题)
NetworkTime Limit: 1000MS Memory Limit: 10000KTotal Submissions: 9134 Accepted: 4292DescriptionA Telephone Line Company (TLC) is establishing a new telephone cabl原创 2014-07-22 09:45:10 · 553 阅读 · 0 评论 -
网络最大流之dinic模板
dinic:void dinic_bfs(int s){ int f,r,x,e; memset(lvl,-1,sizeof lvl); f=r=0; q[r++]=s;lvl[s]=0; while(f<r) { x=q[f++]; for(e=first[x];~e;e=nex[e]) if(c[e]&&lvl[v[e]]==-1) { lvl[v原创 2014-08-04 20:39:16 · 503 阅读 · 0 评论 -
HDU4738 Caocao's Bridges(桥)
http://acm.hdu.edu.cn/showproblem.php?pid=4738题意:给定一张无向图,求其中权值最小的一座桥,派最少的士兵去炸掉它!!思路:直接用tarjan计算出桥并且取其中权值最小者。此题坑点甚多,1、有可能桥本来就不联通,输出-1。2、桥最小者为0,输出1(至少排一个人去炸桥)。3、不要去重边,两个岛之间允许有多座桥,tarjan忽略返回边只忽略一次,原创 2014-12-16 20:44:16 · 1594 阅读 · 0 评论 -
HDU1560:DNA sequence(IDA*)
求一DNA串包含所有给定字串。ida*剪枝,预测函数为个匹配串为匹配部分最大长度。代码:#include#include#include#include#include#include#include#define rep(i,a,b) for(int i=(a);i<(b);i++)#define rev(i,a,b) for(int i=(a);i>=(b);i--)原创 2014-11-30 15:43:51 · 521 阅读 · 0 评论 -
POJ 1236 Network Of Schools (强连通分量模板题)
代码:#include#include#include#include#include#include#include#include#define rep(i,a,b) for(int i=(a);i<(b);i++)#define rev(i,a,b) for(int i=(a);i>=(b);i--)#define clr(a,x) memset(a,x,sizeof原创 2014-11-30 15:11:06 · 742 阅读 · 0 评论 -
最短路模板,floyd prim
BFS:const int INF=0x3f3f3f3f;int first[MAXN];int next[MAXM];int u[MAXM];int v[MAXM];int w[MAXM];int bfs(int s,int t){ int i; queueq; bool inq[MAXN]; for(i=1;i<=n;i++)d[i]=(i==t?0:INF);原创 2014-05-09 17:52:43 · 635 阅读 · 0 评论 -
dijkstra模板
dijkstra:void dijkstra(int s){ int i,j,mark; memset(vis,0,sizeof(vis)); for(i=1;i<=n;i++) dis[i]=(i==s?0:map[s][i]); vis[s]=1; for(i=1;i<n;i++) { int temp=INF; for(j=1;j<=n;j++) if(原创 2014-08-11 09:06:02 · 433 阅读 · 0 评论 -
Bellman模板
Bellman:bool bellman() { int i,j,k; for(i=1;i<=n;i++)d[i]=INF; for(i=1;i<=n;i++) { int flag=0; for(j=0;j<m;j++) if(d[u[j]]+w[j]<d[v[j]])原创 2014-08-11 09:06:49 · 505 阅读 · 0 评论 -
HDU 1027 Ignatius and the Princess II (STL全排列)
Ignatius and the Princess IITime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 4665 Accepted Submission(s): 2805Problem Description原创 2014-08-19 21:37:44 · 559 阅读 · 0 评论 -
拓扑排序模板
bool topsort(int n){ priority_queueq; memset(h,0,sizeof h); for(int i=1;i<=n;i++) if(!in[i])q.push(i); int k=n; while(!q.empty()) { int x=q.top();q.pop();原创 2014-08-15 14:23:05 · 607 阅读 · 0 评论 -
拓展欧几里得模板
数论拓展欧几里得,计算mx+ny=d的一组解(m,n为已知)int xx=x+n/d*i;int yy=y-m/d*i;//xx,yy分别为其他通解void extend_gcd(int a,int b,int &x,int &y,int &d) { if(!b) { x=1; y=0; d=a;原创 2014-10-29 11:17:52 · 823 阅读 · 0 评论 -
poj 1220 NUMBER BASE CONVERSION(字符串处理经典)
NUMBER BASE CONVERSIONTime Limit: 1000MS Memory Limit: 10000KTotal Submissions: 4268 Accepted: 1919DescriptionWrite a program to convert numbers in one base to nu原创 2014-08-08 15:12:55 · 610 阅读 · 0 评论 -
poj 3461(kmp字符串匹配模板)
kmp:#include#include#include#include#include#include#include#define LL long long#define MOD 100000007#define INF 0x3f3f3f3f#define lson s,mid,n<<1#define rson mid+1,e,n<<1||1using namesp原创 2014-09-06 11:00:09 · 526 阅读 · 0 评论 -
最短路及次短路
#include#include#include#include#include#include#include#include#define rep(i,a,b) for(int i=(a);i<(b);i++)#define rev(i,a,b) for(int i=(a);i>=(b);i--)#define clr(a,x) memset(a,x,sizeof a)#原创 2014-11-30 14:20:17 · 593 阅读 · 0 评论 -
poj 3635(搜索)
我刚开始用dp做,超时了,看了别人博客重写ac的。个人觉得此题更偏向搜索,dp数组只是记录最佳状态的标记。#include#include#include#include#include#include#include#include#define rep(i,a,b) for(int i=(a);i<(b);i++)#define rev(i,a,b) for(int原创 2014-11-30 14:31:05 · 594 阅读 · 0 评论 -
poj 2728 Desert King最小比例生成树
问题可以转化为:给定一个rate,z(rate)=∑xi×ci-rate*∑xi×disi,xi为一棵生成树使(∑xi×ci-rate*∑xi×disi)的值最小(下面会介绍求此生成树的方法),则rate=(∑xi×ci-z(rate))/( ∑xi×disi),令rateNex=(∑xi×ci)/( ∑xi×disi)。求解生成树xi使(∑xi×ci-rate*∑xi×disi)原创 2014-11-30 15:08:57 · 703 阅读 · 0 评论 -
SPFA模板
SPFA:void spfa(int x) { queueq; memset(dis,0x3f,sizeof dis); memset(inq,0,sizeof inq); q.push(x); dis[x]=0; inq[x]=1; while(!q.empty()) {原创 2014-08-09 21:21:29 · 458 阅读 · 0 评论 -
最大网络最小流
const int maxn=805;const int maxm=2000005;int first[maxn],dis[maxn],vis[maxn],pre[maxn];int u[maxm],v[maxm],w[maxm],cost[maxm],flow[maxm],nex[maxm];int n,m,vcnt,ecnt,vcnt1,vcnt2;void add_(int a,i原创 2015-02-15 14:46:30 · 558 阅读 · 0 评论