随笔分类 - Template
acm/icpc
摘要:1 /* 2 构建一棵dfs树,序列dfn[i]为深度优先数,表示dfs时访问i节点的序号,low[i]表示从i节点出发能访问到的最小的深度优先数。 3 4 当且仅当节点u满足如下两个条件之一时,u为割点: 5 1.u为dfs树的根,且u至少有两个子节点。 6 2.u不是dfs树的根,至少存在一个节点v是u的子节点,且low[v]>=dfn[u]。 7 8 若u为割点,记subnets[u]为u的子节点数,则去掉u后,图被分成subnets[u]+1个部分(每个子节点的部分和u的祖先的部分),若u为dfs树的根,则分成subnets[u]个部分(根节点没有祖先)。 9 ...
阅读全文
摘要:在一个网络中每段路径都有“容量”和“费用”两个限制的条件下,此类问题的研究试图寻找出:流量从A到B,如何选择路径、分配经过路径的流量,可以达到所用的费用最小的要求。如n辆卡车要运送物品,从A地到B地。由于每条路段都有不同的路费要缴纳,每条路能容纳的车的数量有限制,最小费用最大流问题指如何分配卡车的出发路径可以达到费用最低,物品又能全部送到。 1 //最小费用最大流模版.求最大费用最大流建图时把费用取负即可。 2 //无向边转换成有向边时需要拆分成两条有向边。即两次加边。 3 const int maxn = 1010; 4 const int maxm = 1000200; 5 const i
阅读全文
摘要:坑爹啊,开始一直写不进去自己的模版,谷歌也找不出,后来转念一想,把关键字 换成 “KawigiEdit template”然后终于找到了。貌似是2.0的版本存在的问题,换成2.1就好了。2.1的下载地址:http://topcoder.yajags.com/KawigiEdit_2.1.jar
阅读全文
摘要:题目大意是:给你坐标上一些点,然后你需要用一些边把他们连接起来,边有费用和长度,求总费用和总长度最小比值。 二分答案: 每边有两权值(a,b),求∑a/ ∑b最小的生成树. 设∑a/ ∑b=k --> ∑a=k*∑b --->a1+a2+...an = k*(b1+b2+..bn) ---->∑(ai-k*bi)==0 即边权变为a-k*b后求MST,看是否<0,如果<0则说明k太大了。>0说明k太小了。ps:有种迭代的方法。看没太懂。下次看。 1 // File Name: 2728.cpp 2 // Author: Missa 3 // Created
阅读全文
摘要:题意:n头奶牛,给出若干个欢迎关系a b,表示a欢迎b,欢迎关系是单向的,但是是可以传递的,如:a欢迎b,b欢迎c,那么a欢迎c 。另外每个奶牛都是欢迎他自己的。求出被所有的奶牛欢迎的奶牛的数目.方法:对有向图求强连通分量,然后找出所有独立的强连通分量(所谓独立,就是该连通分量里面的点到外面的点没有通路,当然,连通分量外的点是可以有路到强连通分量内的点的),如果独立的强连通分量的数目只有一个,那么,就输出这个强连通分量内解的个数,否则输出无解。kosaraju:http://www.nocow.cn/index.php/Kosaraju%E7%AE%97%E6%B3%95View Code .
阅读全文
摘要:混合图的欧拉回路。dinic邻接表形式模版。 1 //poj 1637 2 /************************************************************************* 3 * 混合图的欧拉回路问题 4 5 欧拉回路问题。 6 7 1 定义 欧拉通路 (Euler tour)——通过图中每条边一次且仅一次,并且过每一顶点的通路。 欧拉回路 (Euler circuit)——通过图中每条边一次且仅一次,并且过每一顶点的回路。 欧拉图——存在欧拉回路的图。 8 9 2 无向图是否具有欧拉通路或回路的判定 G有欧拉通...
阅读全文
摘要:1 #include <iostream> 2 #include <cstdio> 3 #include <queue> 4 #include <cmath> 5 #include <algorithm> 6 #include <cstring> 7 using namespace std; 8 9 #define inf 0x3f3f3f3f 10 11 int supply[55],demand[55];//某种商品的提供量和需求量 12 int dis[110],pre[110],s,t;//s为超级源点,t为超级汇
阅读全文
摘要:转自:http://www.cnblogs.com/wangkangluo1/archive/2011/07/22/2114118.htmlstring类的构造函数:string(const char *s); //用c字符串s初始化string(int n,char c); //用n个字符c初始化此外,string类还支持默认构造函数和复制构造函数,如string s1;string s2="hello";都是正确的写法。当构造的string太长而无法表达时会抛出length_error异常string类的字符操作:const char &operator[](i
阅读全文
摘要:1 #include<math.h> 2 #define MAXN 1000 3 #define offset 10000 4 #define eps 1e-8 5 #define PI acos(-1.0)//3.14159265358979323846 6 //判断一个数是否为0,是则返回true,否则返回false 7 #define zero(x)(((x)>0?(x):-(x))<eps) 8 //返回一个数的符号,正数返回1,负数返回2,否则返回0 9 #define _sign(x)((x)>eps?1:((x)<-eps?2:0)) 10 s
阅读全文
摘要:题意:在一个网络图中有n个点,其中有np个发电站,nc个用户,m条电线;每个发电站,用户,和电线都对应有一个最大的电流;让求出该网络中最大的电流;添加一个源点为(0)和一个汇点(n+1),源点与发电站相连,电流量为发电站的最大电流;用户与汇点相连,电流量为用户需要的最大电流。EK算法模版:10944604xinghan02191459Accepted768K625MSG++1290B2012-10-22 23:17:50View Code 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring&g
阅读全文
摘要:1 //poj 1273 2 #include <iostream> 3 #include <cstdio> 4 #include <cstring> 5 #include <queue> 6 7 using namespace std; 8 #define MAXN 202 9 #define inf 0x7ffffff10 #define Min(x,y) (x>y?y:x)11 int n;//顶点数12 int flow[MAXN][MAXN];//残量网络13 int maxflow;//最大流14 int st,en;//源点,
阅读全文
摘要:这个题有一个意思描述使的题目简单了。。囧。。开始还以为数据水呢。其实是我题目没看清楚。。。只能在A,S的时候才能分成很多的路径。15 8A###A ### ## #### #### ####S#######比如这个数据输出的是16。ps:假如没有那个条件的话,就是应该输出12。。。。(怎么做?。。)这题的代码:View Code 1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 #include <queue> 5 6 using namespace std; 7 8
阅读全文
摘要:1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <algorithm> 5 6 using namespace std; 7 8 #define MAXN 102 9 10 int N,C;11 char s1[MAXN],s2[MAXN],s12[MAXN<<1],ans[MAXN<<1];12 13 //*****************ELFhash***********14 #define HASH 990115 c
阅读全文
摘要:/*http://baike.baidu.com/view/107769.htm * 欧拉函数:定义:用于计算 p(n),小于等于n的所有与n互质的数的个数。例如p[8]=4,(1,3,5,7)计算公式:p(n)=n*(1-1/p1)*(1-1/p2)....*(1-1/pk)【p1,p2,pk都是n的素因子】另:若n=p1^q1*p2^q2*.....*pk^qk则,p(n)=(p1-1)*p1^(q1-1)*(p1-1)*p2^(q2-1)......*(pk-1)*pk^(qk-1)性质:若m,n互质,φ(mn)=φ(m)φ(n)。当n为奇数时,φ(2n)=φ(n)*/求欧拉函数 elu
阅读全文
摘要:LCA问题可以与RMQ问题互相转化,长郡中学 郭华阳的《RMQ&LCA问题》讲的很好。这个博客也讲的很好:http://dongxicheng.org/structure/lca-rmq/Run IDUserProblemResultMemoryTimeLanguageCode LengthSubmit Time10873609xinghan02191330Accepted3176K47MSG++2000B2012-10-01 19:49:0310546730xinghan02191330Accepted2032K63MSG++1756B2012-07-27 17:08:33RMQ问题
阅读全文
摘要:Tarjan算法:http://blog.csdn.net/smallacmer/article/details/7432625 1 //这个tarjan算法使用了并查集+dfs的操作。中间的那个并查集操作的作用,只是将已经查找过的节点捆成一个集合然后再指向一个公共的祖先。另外,如果要查询LCA(a,b),必须把(a,b)和(b,a)都加入邻接表。 2 // 3 //O(n+Q) 4 5 #include <iostream> 6 #include <cstdio> 7 #include <cstring> 8 #include <vector>
阅读全文
摘要:poj 3692View Code 1 //POJ3692 2 //匈牙利算法,二分图的最大匹配 3 //最大完全数:最大完全子图中顶点的个数 最大完全数=原图的补图的最大独立数 4 5 #include <iostream> 6 #include <cstdio> 7 #include <cstring> 8 9 using namespace std;10 11 #define MAXN 21012 13 int nx,ny;14 bool vis[MAXN];15 int map[MAXN][MAXN];16 int link[MAXN];//第y个点
阅读全文
摘要:1 //hdu 2665 2 #include <iostream> 3 #include <cstdio> 4 #include <algorithm> 5 #include <cstring> 6 7 using namespace std; 8 9 #define ls rt<<1 10 #define rs rt<<1|1 11 #define lson l,m,ls 12 #define rson m+1,r,rs 13 14 #define MAXN 100010 15 16 int len; 17 int s
阅读全文

浙公网安备 33010602011771号