ACM_图论
luke2834
A junior researcher~
展开
-
Codeforces Round #285 (Div. 2) C. Misha and Forest
题意 一个森林,告诉你每个点相邻点数Di,和相邻点编号的异或和Si,求边数和所有边的端点编号思路 森林中边数不超过(n-1),必有叶子节点,考虑到异或的性质:a^b^b=a;a^a=0,得到叶子节点i的Si即是i相邻节点j,直接输出这样一组边,然后Dj--; Sj ^=i,就这样动态的遍历所有叶子节点即可。#include #include #include #includ原创 2015-01-21 21:57:41 · 428 阅读 · 0 评论 -
Codeforces 609E Minimum spanning tree for each edge 树链剖分+RMQ(st算法)+最小生成树
题意就是给你一个有权无向图,无子环、无重边,问你,要求对每一个边i,必须在生成树里时的最小生成树的权值。思路这题思路不算太难想到,主要是第一次写树链剖分各种卡。。。这叫一个烦。。幸亏CF上可以看数据,要不然不知道调哪辈子去了。。。不瞎扯了,这题就是先跑一个最小生成树,得到权值A。然后遍历每个边,对于边{u,v},如果它本身就在最小生成树中,值就是A。如果不在树里,那么我们就需要看在树中的链原创 2015-12-20 14:08:07 · 949 阅读 · 0 评论 -
hihoCoder 1122 二分图最大匹配 最大流
题意求二分图最大匹配思路没有用匈牙利算法,而是试了试要带去的两个最大流模板。。就是加一个源点,一个汇点,源到二分图集合1的点加一个流量为1的边,集合1到集合2的边设置为流量1,集合2的点到汇点加入流量1的边实现模板1实现#include <iostream>#include <cstring>#include <cmath>#include <algorithm>#includ原创 2015-12-07 20:39:59 · 652 阅读 · 0 评论 -
hdu5556 2015ACM合肥现场赛题 二分图最大独立集
题意在一个n*m的矩阵中,标记为’.’的为单独的一个点,标记为同一个数字的单元格和在一起是一个点,且是四联通的,为你这样建图之后它的最大独立集。n,m <= 10,数字数是0~9思路枚举0~9哪些放入独立集中,这样有2^10的复杂度在上述的基础上,建立二分图,具体来说,是数字格的单元格不作为二分图的点加入,是放入独立集的数字格周围的单元格不算做二分图里的点。剩余的点,i+j 是奇数的作为原创 2015-12-08 08:57:29 · 1219 阅读 · 0 评论 -
Codeforces 615B Longtail Hedgehog (Round #338 (Div. 2) B题)
题意给你一个无向图,让你找到一个通路,路上的点是依次增大的,点的个数记为len然后找到所有连接到这条路末尾节点的边,数量为num找到最大的num * len思路基本是枚举以第i个节点为结尾得到的num * lennum很好得到,开个数组记录下就好len的话,用了个小dp,dp(j) = max(dp(i) + 1 , dp(j)) 存在(i,j)这条边存图直接只记录从小编号点到大编原创 2016-01-09 22:42:15 · 378 阅读 · 0 评论 -
Codeforces 510C Fox And Names 拓扑排序
题意给你n个字符串,问你存不存在一种字母表的顺序,使得这n个字符串是按拓扑序排好的如果存在,给出这种顺序思路这题其实很简单,就是扫一遍相邻两个字符串,建立以字母为节点的有向图然后跑一个拓扑序贴出来的原因,主要是犯了一个特别傻的错误。。当年WA的原因,今天又WA在这了。。。也算是给自己提个醒吧。。错误就是,g[i][j]赋值为1时,没判定原来g[i][j]是否已经为1,就让入度(i) +原创 2016-01-12 18:38:42 · 364 阅读 · 0 评论 -
hihoCoder 1069 最近公共祖先 在线算法
题意多组询问,求最近公共祖先思路基本思路就是,把节点映射到一个数组的下标中,然后数组记录每个点的深度我们需要保证,每两个节点映射的位置间,存在只存在它俩的最近公共祖先,而不存在其它祖先我们先想一下,如果是一个二叉树,我们只要按照中序周游的顺序,存入数组中,是不是就满足要求了那么,现在这个树不一定是二叉的,那么类似二叉中序遍历,对u节点,访问完第一个子树后,存一下节点u的深度,再访问第二个原创 2016-01-30 00:53:36 · 948 阅读 · 0 评论 -
Codeforces 620E New Year Tree dfs + 线段树(区间查询+区间置数) + 位运算
题意给你一棵树n(4e5)个节点,每个节点有一种颜色(60种以下的颜色)有两种操作,修改一棵子树所有节点的颜色为c查询,一颗子树下有多少种颜色思路先考虑,如果是在一个数组里,每次修改一个区间和查询一个区间怎么做?基本想法,就是线段树记录下每个区间内的颜色都有哪些,然后就可以归并了由于只有60种颜色,我们可以用位压缩编码,然后归并的时候,就是按位取或即可所以,这棵线段树维护的就是一个取原创 2016-01-30 14:41:01 · 571 阅读 · 0 评论 -
POJ3057 Evacuation 最大流+二分答案
题意在一个用矩阵描述的房间里,每个非墙位置都有一个人矩阵外侧一圈,是墙或者门每个人移动一格的时间为1,但是每个时刻通过门的人数只能为1问你最快所有人出房间的时间为多少思路 首先,我们很容易想到,给你时间t,看能不能出门,这样可以二分求解如果知道用网络流解该题,这个题的难点就在乎于如何表达每个时刻只能过1人这个信息把时间拆开,每个门和每个时刻组成一个二元组,那么通过这个二元组的流量最多原创 2016-04-10 07:33:30 · 817 阅读 · 0 评论 -
POJ 3259 判断负圈
题意图中两种边,一种正权值双向边,一种负权值单向边问是否存在负圈思路简单模板题,SPFA如果有节点入队超过节点数次,则存在负圈实现#include <iostream>#include <cstring>#include <cstdio>#include <vector>#include <queue>#include <algorithm>using namespace st原创 2016-06-23 15:10:29 · 960 阅读 · 0 评论 -
hihoCoder #1490 : Tree Restoration 微软2017在线笔试题
题意给你一棵树,已知其中全部节点的编号(1~n),节点所在层次,节点在该层从左到右是第几个节点,叶子节点编号以及叶子节点间的距离,但不知节点之间的边信息,要求重构这棵树,输出每个节点的父亲节点。思路我们考虑如果先不使用其他信息,只使用层次遍历的信息以及叶子节点编号的信息可以确定下来哪些节点的父亲节点实际上我们可以找到最靠左的叶子节点,即位于某层最左边所在的层次最小的叶子节点,显然这样的叶子节原创 2017-04-01 11:38:34 · 1499 阅读 · 0 评论 -
poj 1523 求无向图所有割点以及删除割点后连通分量个数 给出详细算法思路
题意无向图找出每个割点,然后求出删除这个割点所得的连通分量个数节点编号在1-1000,但没说按顺序给出思路无向图求所有割点是一类经典问题,这篇blog就以这题为例简单介绍一下求解的算法思路我们希望在O(n+m)的时间里求出所有的割点首先,总体思路是对图进行dfs操作,dfs的过程其实对应了一棵dfs搜索树,而我们就利用这棵搜索树的独特性质,来解决求割点的问题dfs过程是,当我们搜索到节原创 2017-09-25 22:07:03 · 1396 阅读 · 0 评论 -
Leetcode 753. Cracking the Safe 双端队列实现 给出证明思路
题意我们希望构造一个最短的字符串,这个字符串每位可以是0至k-1的字符,并且这个字符串的所有n长子串可以包含所有的nknkn^k种情况(即包含所有用k个字符构建的n长串)思路不难想象,如果构造的这个串每一个n长子串恰好就是一个unique的情况,那么一定就是最短的串,长度为nk+n−1nk+n−1n^k + n - 1先假设我们一定可以构造出这样的串。然后可以换一个角度来看这个...原创 2018-02-21 03:46:54 · 1244 阅读 · 0 评论 -
树链剖分
初学树链剖分。。费了一上午的劲儿学加写题终于A了个题。。。。思想啥的,我回头有时间再这里再整理一下先贴一些好的学习连接:http://blog.sina.com.cn/s/blog_7a1746820100wp67.htmlhttp://wenku.baidu.com/link?url=pswPdxYQkRRQhCM95MmY-4AfGmN2zFcMyUD_PJJkNnjQtjVc8cn6ME原创 2015-12-20 13:49:01 · 330 阅读 · 0 评论 -
hihoCoder 1121 二分图判定
题意判断一个图是否为二分图思路直接深搜染色实现#include <iostream>#include <cstring>#include <cstdio>#include <vector>using namespace std;const int maxn = 100005;#define pb push_backint T;int n,m;vector<int> g[ma原创 2015-12-02 14:58:07 · 492 阅读 · 0 评论 -
hihoCoder1067 最近公共祖先离线查询 dfs + 并查集
题意给定树,有q个查询,查询点对的最近公共祖先思路课参考题中给的解析:http://hihocoder.com/problemset/problem/1067实现#include <bits/stdc++.h>using namespace std;int n,m;const int maxn = 1e5+5;vector<int> g[maxn];typedef pair<int原创 2016-01-01 20:29:09 · 503 阅读 · 0 评论 -
Codeforces Round #287 (Div. 2) E. Breaking Good
题意 在一个稀疏图里找到从1号节点到n号节点的最短路,边权均为1,但路分好坏,在找到最短路的同时,还希望经过的好路最多。在最短路径上的坏路需要修好,不在最短路径上的好路要炸毁,问你最后在找到最短路的同时,需要修好和炸毁的路的总和是多少,并给出具体是哪些边。思路 迭代加深的搜索,优先级1是经过的边数,优先级2是经过的坏路数,用最小值堆。就是要注意,需要保存所有搜过的状态,以便回溯找到那些最短路上原创 2015-01-24 19:50:41 · 474 阅读 · 0 评论 -
Uva10054 无向图打印任意欧拉回路
题意 有一些双色水珠,串成一条项链,前后两个水珠的前后位置颜色要相同,问你可行吗?如果可行,把串的方法打印出来思路 颜色作为节点,水珠为边建图。先用并查集判断连通性,再判断是否为欧拉图,最后dfs打印~注意无向图用过一条边i->j后,要删去i->j和j->i,还有打印的时候有小技巧,可以体会下~#include #include #include #include usin原创 2015-03-29 21:35:52 · 548 阅读 · 0 评论 -
POJ1386 有向图是否存在欧拉通路
#include #include #include #include using namespace std;const int maxm = 100005;const int maxn = 26;int n,m;int ru[maxn];int chu[maxn];int mapp[maxn];int fa[maxn];int ra[maxn];char str[10原创 2015-03-26 13:56:43 · 656 阅读 · 0 评论 -
混合图的欧拉回路(通路)判定
转的是邝神的解释~ 原文:http://www.cnblogs.com/kuangbin/p/3537525.html就是对有无向边和有向边的混合图,判断存不存在欧拉回路。参考下面的解释:【混合图】混合图(既有有向边又有无向边的图)中欧拉环、欧拉路径的判定需要借助网络流!(1)欧拉环的判定:一开始当然是判断原图的基图是否连通,若不连通则一定不存在欧拉环或欧转载 2015-03-30 12:32:48 · 524 阅读 · 0 评论 -
hihoCoder 第38周 二分答案+BFS
题意 在这个游戏里面,海域是N个战略点(编号1..N)组成,其中红色的点表示有敌人驻扎,猫头像的的点表示该地图敌军主力舰队(boss)的驻扎点,虚线表示各个战略点之间的航线(无向边)。在游戏中要从一个战略点到相邻战略点需要满足一定的条件,即需要舰队的索敌值大于等于这两点之间航线的索敌值需求。由于提高索敌值需要将攻击机、轰炸机换成侦察机,舰队索敌值越高,也就意味着舰队的战力越低。另外在每原创 2015-03-22 21:48:53 · 611 阅读 · 0 评论 -
hdu 5195 BC#35 拓扑排序 优先队列 重复入队的想法 十字链表
题意 求可以删除K条边的DAG图的最大字典序的拓扑序列思路 用优先队列维护入度小于等于K的点(注意入队后,不改变K),BFS,每次看堆顶元素i的入度是否小于等于当前的K,是则K减入度,删去到i的边,继续从i搜索,否则出队,继续看堆顶元素,重复上述步骤。继续搜到的点入度如果小于等于当前K则入队,注意维护是否入队的数组,不要重复入队~注意点:(1)拓扑排序删边,不用真删,只要维护入度数原创 2015-03-30 21:10:40 · 514 阅读 · 0 评论 -
POJ 1637 混合图欧拉回路判断 最大流模板
题意 给你一个混合图(有向边+无向边),判断是否存在欧拉回路思路 设d(i) = 出度(i) - 入度(i)。无向边随意定向,先并查集判连通,判di是否都为偶数,不是则不行。建图,加入s,t两点,对di>0的,s->i建边,最大流量为di/2,对dit建边,最大流量为-di/2。把随意定向的无向边,加入图中,最大流量为1.跑最大流,如果最后从s出的边都满流,则有欧拉回路。把那些流量为1的边原创 2015-04-01 16:29:41 · 428 阅读 · 0 评论 -
2015编程之美初赛1 hihoCoder1158 质数相关 树形DP
时间限制:2000ms单点时限:1000ms内存限制:256MB描述两个数a和 b (a输入第一行为一个数T,为数据组数。之后每组数据包含两行。第一行为N,为集合S的大小。第二行为N个整数,表示集合内的数。输出对于每组数据输出一行,形如"Case #X: Y"。X为数据编号,从1开始,Y为最大的子集的大小。数据范围1原创 2015-04-29 09:21:11 · 494 阅读 · 1 评论 -
hihoCoder 47周 拓扑排序
描述由于今天上课的老师讲的特别无聊,小Hi和小Ho偷偷地聊了起来。小Ho:小Hi,你这学期有选什么课么?小Hi:挺多的,比如XXX1,XXX2还有XXX3。本来想选YYY2的,但是好像没有先选过YYY1,不能选YYY2。小Ho:先修课程真是个麻烦的东西呢。小Hi:没错呢。好多课程都有先修课程,每次选课之前都得先查查有没有先修。教务公布的先修课程记录都是好多年原创 2015-05-29 00:50:22 · 373 阅读 · 0 评论 -
2015百度之星 初赛2 连接的管道 最小生成树
题意:老 Jack 有一片农田,以往几年都是靠天吃饭的。但是今年老天格外的不开眼,大旱。所以老 Jack 决定用管道将他的所有相邻的农田全部都串联起来,这样他就可以从远处引水过来进行灌溉了。当老 Jack 买完所有铺设在每块农田内部的管道的时候,老 Jack 遇到了新的难题,因为每一块农田的地势高度都不同,所以要想将两块农田的管道链接,老 Jack 就需要额外再购进跟这两块农田高度差相等长度的原创 2015-05-31 22:00:06 · 425 阅读 · 0 评论 -
hihoCoder #1156 : 彩色的树 2015编程之美初赛
题意给你一颗树,n个节点,每个节点有颜色,初始为0有q次操作,操作1是查询这棵树的不同颜色的子树个数,2是修改某个点的颜色思路这题不是很难,因为每次修改只改一个点,而且从这个点我们就可以比较容易的得出当前这个状态下,全局的不同颜色子树的变化量。具体来说,我们维护对每个节点记录它的父亲节点编号,维护它的颜色,和它孩子节点的颜色,把这些颜色记录在map中,即map[0]表示它颜色为0的孩子个数原创 2015-12-29 23:28:15 · 441 阅读 · 0 评论 -
hdu5521 修改的mlog(n)的Dijkstra算法 2015ACM沈阳现场赛题
题意给你n个点,从其中选出一些点可以构成一个点集合,给你m个点集合,在一个集合里的点相互到达的时间是d问你从1号点和n号点分别出发一个人,选在哪些点相遇,可以使总的相遇时间最短。n是2~100000,每个点集合里的点个数和小于10^6思路朴素的想法,就是对求1和n到各个点的最短路,然后选取对于每个点计算max(dis(1),dis(n)),再选取其中最小值的点。但由于之间建图,会出现一个原创 2015-11-21 10:03:28 · 499 阅读 · 0 评论 -
POJ1235 强连通分量拆分
题意:有N个学校,每个学校之间单向可以发送软件,现在给你一些学校之间的收发关系。问你下面两个问题:至少要给多少个学校发送软件才能使得最终所有学校都收到软件;至少要多加多少个关系才能使得向任意一个学校发送一套软件,每个学校都能收到软件。 思路:先进行强连通分量拆解,构成新的DAG图在图上找到,入度为0节点的个数,记为n1,出度为0节点的个数,记为n2任务1的答案是n1,任务...原创 2018-09-15 13:28:16 · 270 阅读 · 0 评论