图论
文章平均质量分 60
LIN452
(*╹▽╹*)
展开
-
维修道路 题解
[题意]一棵n个节点的树,求两条路径s1,s2最大的长度积,满足s1,s2都是两点之间的最短路径,而且两条路径不含任何公共点.n[思路] O(n^2): 枚举树上的每条边,把此边从树上移除,那么原来的树就变成了两棵子树:所求的两条路径分别在两棵子树中.那么为了满足题意中的最大长度积,分别求出两棵子树的直径即可. O(n):原创 2016-06-26 15:45:20 · 574 阅读 · 0 评论 -
BZOJ2791/POI2012 Rendezvous
Task 给定一个n个顶点的有向图,每个顶点有且仅有一条出边。 对于顶点i,记它的出边为(i, a[i])。再给出q组询问,每组询问由两个顶点a、b组成,要求输出满足下面条件的x、y: 1. 从顶点a沿着出边走x步和从顶点b沿着出边走y步后到达的顶点相同。 2. 在满足条件1的情况下max(x,y)最小。 3. 在满足条件1和2的情况下min(x,y)最小。 4. 在满足条件1、原创 2016-10-08 16:26:11 · 651 阅读 · 0 评论 -
BZOJ1532/POI2005 Dicing
直接求似乎不简单,由于题目求”最大值最小问题”,可以转化为二分答案来验证一个解是否成立.假设枚举的答案是x,那么所有人赢得的场次都<=x.而每场比赛最多只有一个人获胜,我们可以根据此信息,构图: 设置源点与每个人建边,每个人与它所参加的每场比赛建边,每场比赛与超级汇点建边并且流量设置为1.根据此图跑一遍最大流,判断是否为m即可. #include<cstdio>#include<cstring>原创 2016-10-27 07:13:09 · 425 阅读 · 0 评论 -
BZOJ1539/POI2005 Double-row
由于数据保证有一组方案达到目标,那么相同高度的士兵个数不超过2. 每列交换的次数最多是1,多次交换是无意义的. 那么假如身高相同的两个士兵在同一行中,它们所在的列数a,b中一定有一列要进行交换,且只有一列. 那么假如身高相同的两个士兵在不同行中,它们所在的列数a,b中要么都进行交换,或者都不进行交换. 有了列与列之间的关系就可以建对以上两类情况分别建边,进行01染色,将原创 2016-10-27 07:20:39 · 604 阅读 · 0 评论 -
CodeForces 160D Edges in MST 题解
[题意] 给出一个n个点m条边的无向连通图,判断图中每条边是否一定在最小生成树上. n,m[思路]由于最小生成树的性质,我们造出任意一棵最小生成树,并记录下与最小生成树权值相等的所有边.暴力版:沿着非树边x的两个端点走到它们的lca,在环上去找与x权值相同的边,如果找到,说明被替换的边和x都不一定在最小生成树上.暴力做法优化版:这里又有一个结论原创 2016-06-28 07:13:04 · 619 阅读 · 0 评论 -
dfs序的常见用法整理
dfs序就是一棵树在dfs遍历时组成的节点序列.它有这样一个特点:一棵子树的dfs序是一个区间.下面是dfs序的基本代码:void dfs(int x,int pre,int d){//L,R表示一个子树的范围 L[x]=++tot; dep[x]=d; for(int i=0;i<e[x].size();i++){ int y=e[x][i];转载 2016-06-27 21:32:06 · 4803 阅读 · 0 评论