图论
Coco_T_
东南大学本科毕业生,浙江大学在读研究生
展开
-
bzoj4031 [HEOI2015]小Z的房间(矩阵树定理)
题目链接分析: 从题目限制我们可以得到这种图中有哪些边可以存在 因为任意两个房间之间都只有一条通路,那么得到的一定是一棵树 因此题目转化成:图的生成树个数 矩阵树定理即可tip注意柱子是不能算结点的 注意取模,矩阵中不要有负数 一开始我把矩阵消成了对角线形,结果WA了,消成上三角性就A了 看来保险起见,求解行列式的时候还是消成上三角#include<cstdi...原创 2018-03-29 09:14:21 · 218 阅读 · 0 评论 -
11.5 T1.attack(拓扑+lca)
分析: 如果整个图是一棵树,那么针对每个询问 必经路径就是k个点的lca到根节点的路径 实际上扩展成一个普通的图也是这样听男生们在讨论的时候,说这道题和灾难那道题”一样“ 我仔细一想,确实哎, 我们现在手上的图是一个DAG 首先我们把ta的拓扑序计算出来 之后构造一个“拓扑树”: 假设当前点是x,x的祖先一定都在拓扑树中了我们要找到与原图中直接指向x的所有点在拓扑树中的lca,把x挂原创 2017-11-05 18:54:09 · 903 阅读 · 0 评论 -
与别校的联hu考zuo(11.4)
T1.kill题目描述 有n个人要完成任务,每个人的任务是:从他们当前的位置出发,打倒1个怪物,然后返回任务交付点。 现在郊区一共有m只怪物,所有人,所有怪物以及任务交付点在一条直线上,现在告诉你每个人所在的位置,以及每个怪物的位置 ,任务交付点的位置为s,你需要给每个人选择一只怪物去打。要求每个人都有一只怪物打,每个怪物最多被一个人打,假如所有人同时开始任务,你需要最小化最晚完成任务的人所需要原创 2017-11-05 14:54:07 · 475 阅读 · 0 评论 -
UVa10816 - Travel in Desert(二分+dijkstra)
题目链接简介分析: 二分+dijkstra最短路二分最高温度 每次用dij判断 对于本题的数据范围是完全可以接受的tip晚上有点累了,所以码码的速度下降了,也很容易出错 码码的时候一定要注意,不要手残注意精度问题 一开始我的上下边界选择的是输入中的最低温度和最高温度,结果狂WA不止 题目说温度在20~50之间 但是我在对拍的时候,发现标称的输出有19.9 于是我就把上下边界改成了19原创 2017-10-26 20:04:32 · 248 阅读 · 0 评论 -
UVa10048 - Audiophobia(floyed|最小生成树)
题目链接简介: 要求两点之间最大路径权值最小,输出这个最大路径分析: 书上给了一种很简单的做法:floyedG[i][j]=min(G[i][j],max(G[i][k],G[k][j]));这样做为什么对呢? 因为无论是floyed和dijkstra,都是基于这样一个事实: 对于任何一条至少包含两条边的路径i—>j,一定存在一个k,使得i—>j的总长度等于i—>k和k—>j的路径和 对于原创 2017-11-03 15:32:44 · 371 阅读 · 0 评论 -
UVa10600 ACM Contest and Blackout(最小和次小生成树)
简介: 最小生成树和次小生成树分析: 当图变成了一棵树(纠结的生成树)//这里写代码片#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;const int INF=0x33333333;int maxline[103][103];struct node1{原创 2017-10-25 21:10:26 · 254 阅读 · 0 评论 -
UVa10269 - Adventure of Super Mario(floyed+dijkstra(dp))
简介: 再次成功营救出桃子公主的马里奥需要从大魔王Bowser的城堡返回ta的家 马里奥的世界里有A座村庄,B座城堡,其中村庄的标号为1~A,城堡的编号为A+1~A+B 马里奥住在村庄1,而Bowser住在城堡A+B 马里奥能以一小时一千米的速度沿着村庄和城堡之间的双向道路行走,也可以使用魔法鞋加速, 魔法鞋可以让马里奥瞬间移动不超过L千米,但由于城堡中有很多陷阱, 聪明的马里奥是不会冒原创 2017-10-25 16:59:04 · 291 阅读 · 0 评论 -
UVa10603 - Fill(bfs)
简介: 有三个杯子,第三个杯子装满水 互相倒水,使得一个杯子里的水为d 每次倒水只有一个杯子倒空或一个杯子倒满才能停止 求水最少的转移量分析: 正解看一下 一开始我以为这就是一个bfs(事实证明就是一个bfs) 但是在insert的时候的判断有一点不同我维护了四个数组int pour[201]; //pour:到达这个水量的最少转移量 int d原创 2017-10-25 16:04:13 · 246 阅读 · 0 评论 -
当图变成了一棵树(纠结的生成树)
最小生成树经典算法Kruskal算法int cmp(const node &c,const node &d){ return c.z<d.z;}int find(int x) //路径压缩(没有按秩合并)的并查集{ if (fa[x]!=x) fa[x]=find(fa[x]); return f...原创 2017-10-11 16:15:33 · 3896 阅读 · 1 评论 -
UVa10779 - Collectors Problem(最大流)
题目链接简介:交换贴纸分析: 这也算是一个天坑了 很久之前就看过这道题,但是一直没有填美妙的建图: 我们用n-1个点表示每个除Bob之外的人 用m个点表示贴纸,从源点向这m个点连边,边的容量是Bob拥有该种贴纸的数量接下来我们要连接其他人和贴纸: 如果第i个人有超过一张j种贴纸(有k张),那么我们就连接i—>j,容量为k-1,表示ta可以贡献出k-1张第j种贴纸 如果第i个人没有第j种贴原创 2017-10-13 16:33:25 · 266 阅读 · 0 评论 -
UVa 11354 - Bond(最小生成树+倍增lca)
题目链接简介: 最小瓶颈路,点对之间的路径中的最大边权分析: 肯定是先求出最小生成树(一看到瓶颈路,就要往这方面想,当然也不是绝对的)因为需要回答大量的查询,我们就需要把信息组织成某种易于查询的结构一开始我认为可以直接像例一这样n^2处理,O(1)回答 但是n的范围不允许我这样干, 所以我们还是用最古老的方法:倍增那么这道题就和货车运输有异曲同工之妙了tip代码量有点大//这里写代码片#i原创 2017-10-11 18:35:35 · 336 阅读 · 0 评论 -
UVa 11090 - Going in Cycle!!(正版Bellman)
题目链接分析: 这道题我们需要二分答案 对于一个二分出来的mid,只需要判断是否存在平均值小于mid的回路 如何判断呢? 假设存在一条回路k1,k2,k3,…kn平均值小于mid 则有:k1+k2+k3+…+kn < mid*n 移向得:k1-mid+k2-mid+…+kn-mid < 0这样就很明了了, 我们只要把每条边的权值由w(i,j)变成w(i,j)-mid 用Bellman原创 2017-10-10 20:08:25 · 252 阅读 · 0 评论 -
UVa10537 - The Toll! Revisited(dijkstra+二分)
题目链接简介: 过路费(加强版) 需要运送一定的货物,路上会经过村庄和城镇, 都会缴纳不同数量的货物 求在起点最小需要携带的货物分析: 一眼dp 设计状态f[i]表示到达i,最多需要的货物然而这道题我耍了一个”小心眼“ 因为是在Dijkstra章节的例题,当然是要用Dijkstra解决啦 由于每走一步,就要有花费,而且花费还和货物的数量有关 我的第一反应就是把边权赋成原创 2017-10-10 10:14:37 · 297 阅读 · 0 评论 -
UVa10917 - Walk Through the Forest(dijkstra+dp)
题目链接分析: 我现在深刻怀疑歪果人的表达能力 看看这个题面: He considerstaking a path from A to B to beprogress if there exists a route from B to his home that is shorter than any possible route from A. 他只沿着满足如下条件的道路(A,B)走原创 2017-10-10 08:40:11 · 281 阅读 · 0 评论 -
UVa11374 - Airport Express(dijkstra【总是输出带来的困扰)
题目链接分析: 一看到K的范围不大,就想到了枚举 两遍dijkstra得到起点到各点的单源最短路 以及终点到各点的单源最短路 枚举每一条商业线 dis=w(i,j)+dis1(i)+dis2(j)注意边都是双向的,所以在计算时间的时候也要双向考虑dist=dis1[u]+v+dis2[w]; //双向边,所以要双向考虑 if (dist<ans){ ans=dist;原创 2017-10-10 07:49:28 · 413 阅读 · 0 评论 -
与不知道什么学ping校ce的ji联zha考le(11.5)
T1.attackT2.reverse分析: 实际上我们是可以倒推出每个状态的前驱 所以我们先把长度长的字符串向前推,直到两个字符串长度相同 之后两个字符串同时向上推,直到达到第一个相同的状态 形象点来说:我们可以把状态集合想象成一棵树,一操作是向左子树走,二操作是向右子树走 我们所求就是两个节点的lca这道题还涉及字符串hash,还是有点难度的T3.tree原创 2017-11-05 17:04:11 · 421 阅读 · 0 评论 -
图上的文章续(KM算法)
KM算法只适用于完全二分图KM算法是神马啊: 对于具有二部划分( V1, V2 )的加权完全二分图,其中 V1= { x1, x2, x3, … , xn }, V2= { y1, y2, y3, … , yn },边具有权值 Wi,j 。该带权二分图中一个总权值最大的完美匹配,称之为最佳匹配。诶。。。什么是完美匹配呢二分图的最大匹配,完美匹配好了 现在我们该知道的都知原创 2017-09-30 11:14:08 · 389 阅读 · 0 评论 -
UVa 10766 Organising the Organisation(矩阵树定理)
题目链接题意: 给出n,m,k,n,m,k,代表一家公司有nn个部门,有mm组关系,表示ii和jj不能直接联通,kk代表主管部门,询问有多少种分层方案题解: 首先题面看不大懂,直接找到前辈的题目描述Ctrl+C一下 其次,这道题的k可以忽略掉,所以ta的范围完全是吓唬人的那么这道题就是求nn个点的有编号无根树数量 有编号无根树的一种有力的解决方法就是Prufer编码 但是...原创 2018-03-29 06:57:17 · 263 阅读 · 0 评论 -
Matrix-Tree定理(sx之前填坑还来得及吗)
从入门到入土:矩阵树Matrix-Tree定理 参考blog在正式介绍Matrix_Tree定理之前,我们需要一些前置知识一些定义与定理对于一个无向图GGG,ta的生成树个数等于其基尔霍夫Kirchhhoff矩阵任何一个N−1N−1N-1阶主子式的行列式的绝对值所谓N−1N−1N-1阶主子式就是对于任意的一个r,将矩阵的第rrr行和第rrr列同时删去得到的新矩阵基尔霍夫Ki...原创 2018-03-28 20:53:39 · 741 阅读 · 0 评论 -
胖爷XP的hu测 T3.程序(提答)
版权属于XP,想要引用此题(包括题面)的朋友请联系博主 分析:为什么我要在blog里写提答题:感觉这次的提答比较好,考核的知识点很好 dada们就当玩笑看看吧一道一道看program1#include<bits\stdc++.h>using namespace std;int getseed(char *s){ int seed...原创 2018-03-20 20:25:03 · 185 阅读 · 0 评论 -
bzoj3073 [Pa2011]Journeys(线段树优化建图+堆优dijkstra)
DescriptionSeter建造了一个很大的星球,他准备建造N个国家和无数双向道路。N个国家很快建造好了,用1..N编号,但是他发现道路实在太多了,他要一条条建简直是不可能的!于是他以如下方式建造道路:(a,b),(c,d)表示,对于任意两个国家x,y,如果a<=x<=b,c<=y<=d,那么在xy之间建造一条道路。Seter保证一条道路不会修建两次,也保证不会...原创 2018-03-19 17:42:21 · 416 阅读 · 0 评论 -
bzoj2788 [Poi2012]Festival(差分约束)
Description有n个正整数X1,X2,…,Xn,再给出m1+m2个限制条件,限制分为两类:1. 给出a,b (1<=a,b<=n),要求满足Xa + 1 = Xb2. 给出c,d (1<=c,d<=n),要求满足Xc <= Xd在满足所有限制的条件下,求集合{Xi}大小的最大值。Input第一行三个正整数n, m1, m2 (2<...原创 2018-03-12 14:15:39 · 413 阅读 · 0 评论 -
poj3621 Sightseeing Cows(最优比率环【学英语)
题目链接分析: 01分数规划:最优比率环求∑val[i]∑e[i]∑val[i]∑e[i]∑val[i] \over ∑e[i] 其中valvalval是环中点的价值,eee是环中边的价值设答案为ansansans 则对于所有环都有:∑val[i]∑e[i]<=ans∑val[i]∑e[i]<=ans{∑val[i] \over ∑e[i]}ans∗∑e[i]−∑...原创 2018-03-04 17:14:52 · 273 阅读 · 1 评论 -
poj2728 Desert King(最优比率生成树【Prim)
题目链接分析: 最小化:∑cost∑len∑cost∑len\sum cost \over \sum len01分数规划:最优比率生成树 渠道的长度是两个村庄之间的水平距离,通道的成本是升降机的高度题目约定: He just needs to build the necessary channels to bring water to all the villages, whic...原创 2018-03-04 15:49:23 · 252 阅读 · 0 评论 -
poj1737 Connected Graph(n点无向连通图)
题目链接题目描述: 给出n个点,求n个点的无向连通图分析: 巨坑啊经典题目,有两种方法:总方案数-不合法方案nnn个点的完全图有C(n,2)=n(n−1)2C(n,2)=n(n−1)2C(n,2)={n(n-1) \over 2}条边,显然就有2C(n,2)2C(n,2)2^{C(n,2)}种子图(枚举每条边是否选择)设f[i]f[i]f[i]表示每个点都和点1相连...原创 2018-03-15 18:57:05 · 4103 阅读 · 0 评论 -
真·奥义·随意的hu测(18.2.28)
今天的hu测真心随意,也没有好好写代码T1,T3真心难 大家就当看着玩吧T1 题解: 对于一个良好数列,我们考虑按数值从小到大加入数列中的元素若当前加入的元素中最大值为x,若数列中一个区间内的数大于x,则那些位置出现空缺,且空缺两端都是x,我们称这类区域为待补区域对于一个良好数列,在上述加入元素过程中出现过的任一数列,我们称之为准良好数列由准良好数列从...原创 2018-02-28 17:23:29 · 223 阅读 · 0 评论 -
真·奥义·随意的hu测 T2.线段(拓扑)
题外话: 这道题其实已经想到正解了,但是在维护答案的细节上出了问题 看来还是考虑的不全面,不能从特殊情况推出一般的规律 还是不能偷懒,一定要用多样化的数据测试自己算法 也算是一个教训吧,dada们比你高明到不知哪里去了,力求完美吧分析: 直觉是一个图论xxx与yyy相交:a[x]<b[y]a[x]<b[y]a[x]a[y]>b[x]a[y]>...原创 2018-02-28 16:18:07 · 209 阅读 · 0 评论 -
图上的文章再续(二分图)
很久之前,介绍过KM算法 KM算法专门解决二分图最佳完美匹配问题 前提是:完全二分图(要明白,这个前提就要求两个部分的点都可以互相到达,这样才能用KM算法中的无脑循环) 得到的:一定是最佳匹配,且每个点都有匹配对象 复杂度:O(n^3) 另外的:如果只是想求最大权值匹配而不要求是完全匹配的话,可以把不相连的边的权值设置为0const int N=101;const int IN原创 2018-01-06 17:47:39 · 331 阅读 · 0 评论 -
UVa11419 - SAM I AM(匈牙利算法/网络流【方案问题)
题目链接简介: 子弹打小怪,一发打一行(列),求最小花费的子弹数,并给出方案分析: 曾经做过和这个有一点相似的题(我又开始考古啦) 然而这道题要简单一点, 还是把每一行,每一列看作是一个点, 如果(i,j)位置上有小怪物,那我们就连接Xi—>Yj,流量是INF 源点向横向点集(X)连边,流量为1 纵向点集(Y)向汇点连边,流量是1为什么这样建图是对的呢: 我们可以把每一原创 2017-10-12 10:00:20 · 566 阅读 · 0 评论 -
UVa 11478 - Halum(二分+差分约束+Bellman)
题目链接简介: 带权有向图,每个点都可以有如下操作:令从ta出发的每一条边增加d,终止于ta的每一条边减小d 最后让所有边权的最小值非负且尽量大分析: 我为什么总是要做这么难的题有一点需要注意,不同的操作互不影响,而且也没有顺序的限制, 因此,我们可以考虑合并一个节点上的所有操作 令sum(a)表示作用在a结点上的所有d值之和, 这样我们就简化了题目:找到合适的sum值,使原创 2017-10-10 21:11:56 · 472 阅读 · 0 评论 -
poj1364 King(差分约束)
题目链接简介: 给出若干形如 a(si) + a(si+1) + … + a(si+ni) a(si) + a(si+1) + … + a(si+ni) > ki 的不等式,询问是否存在合法的a序列分析: 柿子都是区间和的形式 这就在提醒我们把区间和变成前缀和的差 比如说不等式 a(si) + a(si+1) + … + a(si+ni) a(si) + a(si+1原创 2017-10-11 15:31:22 · 226 阅读 · 0 评论 -
UVa11324 - The Largest Clique(Tarjan缩点+dp)
题目链接分析: 不强制双向到达,求最大团 显然一个强连通分量中的点要么都选,要么都不选 我们可以用Tarjan把强连通分量缩点得到SCC图 SCC图中每一个点的权值就是这个SCC中点的数量 问题就转化成, 在图中选择若干个点使得权值和最大 求SCC图中的最大权路径由于SCC图是一个DAG,我们可以用dp来解决这个问题 dp转移方程为f[x] = size[x] + max(f[y])原创 2017-10-09 17:38:59 · 291 阅读 · 0 评论 -
UVa10047-The Monocycle(bfs)
题目链接分析: 我们把颜色和方向连同坐标一起加入状态 之后bfs搜索就好了注意: 转向是不会改变颜色的 相邻两组数据的输出之间应有一个空行找到了额外的样例 (不要直接复制哦,博客上的格式可能有问题)Sample Input 1 3 S#T 10 10 #S…….# #..#.##.## #.##.##.## .#….##.# ##.##..#.# #..#.##…原创 2017-10-09 14:27:31 · 290 阅读 · 0 评论 -
UVa10054 - The Necklace(欧拉回路【输出带来的麻烦)
题目链接分析: 一开始我把每种颜色拆成两个点(下面都称为第一个点,第二个点) 如果一个珠子是左x右y 那就连接x2—>y1,规定这种边只能走一次 每种颜色都连接x2—>x1,规定这种边可以走无数次这样建好图之后,从任一颜色的第一个点开始遍历 看能不能到达这一颜色的第二个点并且所有只能走一次的边都经过了这样确实是可以解决这个问题 但是有些边可以经过无数次,在实际判断的时候有点困难实际上是没原创 2017-10-09 15:06:28 · 362 阅读 · 0 评论 -
poj2195 Going Home(费用流|KM)
Description On a grid map there are n little men and n houses. In each unit time, every little man can move one unit step, either horizontally, or vertically, to an adjacent point. For each little man原创 2017-10-01 15:29:29 · 546 阅读 · 0 评论 -
强连通分量SCC(Tarjan)
什么叫强连通分量呢~ 有向图强连通分量在有向图G中, 如果两个顶点vi,vj间(vi>vj)有一条从vi到vj的有向路径,同时还有一条从vj到vi的有向路径,则称两个顶点强连通(strongly connected)。 如果有向图G的每两个顶点都强连通,称G是一个强连通图。 有向图的极大强连通子图,称为强连通分量(strongly connected components)。原创 2017-06-13 20:50:38 · 953 阅读 · 0 评论 -
图上的文章(割点和桥)
题外话: 今天不想码代码了,知识普及的一天注意:以下内容是在无向图的基础上无向图的割点很久之前就知道这些名词 今天终于可以来填坑了。。。如果将连通图G中的某个点及和这个点相关的边删除后,将使连通分量数量增加,那么这个点就称为图G的割点或是接合点。 如果一个无向图没有割点,则这样的图被称为双连通图。 关于图的割点,有如下两条性质: 【性质一】 如果深度优...原创 2017-09-29 19:48:41 · 533 阅读 · 0 评论 -
bzoj1083 [SCOI2005]繁忙的都市(最小生成树)
Description 城市C是一个非常繁忙的大都市,城市中的道路十分的拥挤,于是市长决定对其中的道路进行改造。城市C的道 路是这样分布的:城市中有n个交叉路口,有些交叉路口之间有道路相连,两个交叉路口之间最多有一条道路相连 接。这些道路是双向的,且把所有的交叉路口直接或间接的连接起来了。每条道路都有一个分值,分值越小表示这 个道路越繁忙,越需要进行改造。但是市政府的资金有限,市长希望进原创 2017-09-30 09:14:16 · 195 阅读 · 0 评论 -
codevs1183 泥泞的道路
题目描述 Description CS有n个小区,并且任意小区之间都有两条单向道路(a到b,b到a)相连。因为最近下了很多暴雨,很多道路都被淹了,不同的道路泥泞程度不同。小A经过对近期天气和地形的科学分析,绘出了每条道路能顺利通过的时间以及这条路的长度。现在小A在小区1,他希望能够很顺利地到达目的地小区n,请帮助小明找出一条从小区1出发到达小区n的所有路线中(总路程/总时间)最大的路线。请你告诉他原创 2017-09-21 20:38:27 · 224 阅读 · 0 评论 -
Tyvj(无向图的桥)
题目链接分析: 无向图的桥tip这么裸的题我为什么没有一A呢 因为我又把n和m搞混啦!!!这里写代码片#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;const int N=210;int n,m;struct node{ int x,y,nxt原创 2017-09-29 21:49:26 · 646 阅读 · 0 评论