随笔分类 -  graph

摘要:差分约束是把形如 ai - bi >= ci (ai - bi = bi + ci ,意思是所有的不等式都要满足这样子的形态, 那么我们建一条从bi->ai权重为ci的边,然后对整个图求最长路, 那么最终的结果就有ai >= bi +ci这是根据最短路的性质。同理,对于不等式 ai ai权重为ci的... 阅读全文
posted @ 2015-05-17 14:10 justPassBy 阅读(174) 评论(0) 推荐(0)
摘要:hdu3873有约束条件的最短路, 城市i收其它城市保护,必须走过这些城市,才能走城市i。 题解差分约束系统可以转化为最短路,所以也算是最短路专辑的一部分 阅读全文
posted @ 2015-05-15 20:58 justPassBy 阅读(143) 评论(0) 推荐(0)
摘要:题目大意:美国佬打算入侵火星,火星上有n个城市,有些城市可能受其他城市保护,如果i城市受j城市保护,那么你必须先攻占j城市才能再攻占i城市,问你攻占城市n的最短时间是多少。数据解释:给定t, 表示有t组数据给定n,m 表示n个点,m条边接下来m条有向边, a,b,c 表示从a到b,距离为c接下来n行... 阅读全文
posted @ 2015-05-15 20:56 justPassBy 阅读(494) 评论(0) 推荐(0)
摘要:http://acm.csu.edu.cn/OnlineJudge/problem.php?cid=2079&pid=1n,m代码n个点,m条边随之而来m条边q 代表q个操作q行,每行一个序号,代表将第m个输入的边删除,问删除后有多少个连通块。思路:我们将m条边,和q询问记录下来,并将要删除的边标记... 阅读全文
posted @ 2015-05-03 20:24 justPassBy 阅读(267) 评论(0) 推荐(0)
摘要:hdu2544 dij水题,用来测试自己实现优先队列对不对 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 ... 阅读全文
posted @ 2015-04-26 19:24 justPassBy 阅读(212) 评论(0) 推荐(0)
摘要:tarjan算法是在dfs生成一颗dfs树的时候按照访问顺序的先后,为每个结点分配一个时间戳,然后再用low[u]表示结点能访问到的最小时间戳以上的各种应用都是在此拓展而来的。割点:如果一个图去掉某个点,使得图的连通分支数增加,那么这个点就是割点某个点是割点,当且仅当这个点的后代没有连回自己祖先的边... 阅读全文
posted @ 2015-04-20 17:27 justPassBy 阅读(766) 评论(0) 推荐(0)
摘要:如果图没有重边,那么一般的求割边tarjan算法是这么操作的。dfs访问每一个点时,为这个点分配一个时间戳dfn[],根据访问次序的先后,时间戳从小到大对于边(u,v)是不是割边,如果lowv > dfn[u],那么边(u,v)是割边,反之不是。 lowv表示的是从点v开始dfs,所能访问到的最小时... 阅读全文
posted @ 2015-04-02 15:19 justPassBy 阅读(2121) 评论(0) 推荐(1)
摘要:树间距离最长的两点所形成的路径叫做树的最长路设这条路为s->t.很容易想到的方法是以每个点为起点当做s,然后dfs求t。 时间复杂度是O(V*(V+E))但有更简单的方法是,以任意点u进行dfs找到最远点,这个最远点为s或t,然后以这个最远点进行dfs,即可找到最长路那么如何证明以任意点u进行dfs... 阅读全文
posted @ 2015-03-24 17:05 justPassBy 阅读(413) 评论(0) 推荐(0)
摘要:拓扑排序O(E), bellman O(VE) , 使用邻接表的dfs O(V+E) ,floyd O(N*N*N)bellman算法只能判断是否存在负环。所以可以先把权值全部设为-1 1 #include 2 #include 3 #include 4 #include 5 using ... 阅读全文
posted @ 2015-03-16 19:33 justPassBy 阅读(1164) 评论(0) 推荐(0)
摘要:拓扑排序是将一个DAG图的所有顶点排成一个线性序列,使得图中任意一对顶点(u,v)若存在边,则u在线性排列中出现在v之前的排列方式(1)算法描述:(a)从网中选择一个入度为零的顶点输出;(b)删除该顶点及其于该点有关的所有边;(c)是否还有入度为零的顶点?若有,执行(a),否则结束。用邻接矩阵时间复... 阅读全文
posted @ 2015-03-16 16:25 justPassBy 阅读(313) 评论(0) 推荐(0)
摘要:#include #include #include using namespace std;int g[111][111];int cnt[111];stack st;int n,m;//搜索求欧拉回路或欧拉通路void dfs(int u, int t){ st.push(u); i... 阅读全文
posted @ 2015-03-15 21:45 justPassBy 阅读(291) 评论(0) 推荐(0)
摘要:http://poj.org/problem?id=1182r[x] = 0 表示x和父亲是同类r[x] = 1 表示x吃父亲r[x] = 2 表示x被父亲吃因为只存在三种动物,且三种动物构成了环形所以动物之间的关系是可推导的。如图:c与a的关系为(r[b] + r[c])%3;b与父亲a的关系可为... 阅读全文
posted @ 2015-03-04 11:02 justPassBy 阅读(205) 评论(0) 推荐(0)
摘要:并查集是一种数据结构,一般用来解决连通性或者动态连通性的问题。动态连通性:即一个图有n个结点,不断加入边,问此时任意两个结点的连通性。建模思路:对于连通的结点它们属于一个组,不连通的结点就属于不同的组。对于每一条边的输入,判断两个结点是否连通,如果不连通则将两个结点所属的两个组连成一个组。对于每一个... 阅读全文
posted @ 2015-02-17 20:21 justPassBy 阅读(211) 评论(0) 推荐(0)
摘要:给定一个有向图,如果存在平均值最小的回路,输出平均值。使用二分法求解,对于一个猜测值mid,判断是否存在平均值小于mid的回路如果存在平均值小于mid的包含k条边的回路,那么有w1+w2+w3+...+wk 2 #include 3 const int N = 50+10; 4 const in... 阅读全文
posted @ 2014-11-23 15:40 justPassBy 阅读(401) 评论(0) 推荐(0)
摘要:给定一个源点,求最短路径,那么存在以源点为根的最短路径树因为最短路径具有最优子结构的性质,所以我们可以先求出树的第一层,然后再求出树的第二层,以此类推bellman_ford算法就是按照这种思想求最短路径的。因为树最多有n-1层,所以只要n-1次循环即可,每次循环i访问所有的边,然后松弛路径,就求出... 阅读全文
posted @ 2014-11-23 14:45 justPassBy 阅读(187) 评论(0) 推荐(0)
摘要:http://poj.org/problem?id=1236第一问:需要几个学校存在软件,才能通过传递,使得所有的学校都有软件 用tarjan算法求出强联通分量后,将每个联通分量缩成一个点,那么问题1的答案就是入度为0的点的个数 为什么?入度为0的点,肯定不能通过其他学校传送软件给他,所以他必须存在... 阅读全文
posted @ 2014-11-21 08:58 justPassBy 阅读(311) 评论(0) 推荐(0)
摘要:要判定一个结点u是不是割点的方法是dfs树中①u是根结点,如果u有两个及其以上的孩子(因为是dfs,所以如果有两个孩子,那么这两个孩子只通过u连接到一起),那么u是割点②u不是根结点,如果u的后代的时间戳能够比u的时间戳小,即u的后代有边能够连回u的祖先,那么u不是割点(即low[v] = pre[... 阅读全文
posted @ 2014-11-20 15:51 justPassBy 阅读(341) 评论(0) 推荐(0)
摘要:在二分图的最大匹配中,每个点(不管是X集合还是Y集合)最多只能与一条匹配边相关联,然而,经常有这种问题,即二分图的一个点可以和多条匹配边相关联,但有上限,即cap[i]表示点i最多能和cap[i]条匹配边相关联。hdu 3605题意:2012来了,n个人可以逃往m个星球中的k个,每个星球都有上限,问... 阅读全文
posted @ 2014-10-14 19:07 justPassBy 阅读(267) 评论(0) 推荐(0)
摘要:题意:给定一个矩阵,矩阵上有的数字是1,有的是0,给定两种操作,交换某两行或者某两列,问是否能置换出对角线为1的矩阵题解:能够置换出对角线是1的矩形要求有n个1既不在同一行也不再同一列,即行列匹配,所以匹配很简单,关键是怎么求出交换的过程,cx[i] 表示第i行与第cx[i]列匹配,即第i行要变成第... 阅读全文
posted @ 2014-10-13 22:05 justPassBy 阅读(178) 评论(0) 推荐(0)
摘要:题意:给出n*m的矩阵方块,某些方块是ponds,这些方块不能出售,然后能出售的是1*2的方块要求求出有多少块1*2的方块能够出售,并输出这些方块的坐标(specia judge)关键是怎么建出二分图,然后找最大匹配可以把i+j==奇数的点提取出来,成为X集合,那么与(i,j)相邻的点就是Y集合了,... 阅读全文
posted @ 2014-10-13 16:03 justPassBy 阅读(181) 评论(0) 推荐(0)