
图论
文章平均质量分 66
zz_ylolita
这个作者很懒,什么都没留下…
展开
-
tyvj1307 kruskal+并查集 最小生成树
这题一开始没注意数据范围,RE了好几次。。如果规定某些边一定要经过,用kruskal方便地原创 2014-08-07 01:03:35 · 713 阅读 · 0 评论 -
noi2012美食节
描述 CZ市为了欢迎全国各地的同学,特地举办了一场盛大的美食节。作为一个喜欢尝鲜的美食客,小M自然不愿意错过这场盛宴。他很快就尝遍了美食节所有的美食。然而,尝鲜的欲望是难以满足的。尽管所有的菜品都很可口,厨师做菜的速度也很快,小M仍然觉得自己桌上没有已经摆在别人餐桌上的美食是一件无法忍受的事情。于是小M开始研究起了做菜顺序的问题,即安排一个做菜的顺序使得同学们的等待时间最短。小M发现,美食节共有n原创 2015-03-17 00:10:51 · 628 阅读 · 0 评论 -
[AHOI2014]支线剧情(有上下界的费用流)
由于不想被认为三心二意不努力,所以最好这周把ahoi2014做完。。。 【故事背景】 宅男JYY非常喜欢玩RPG游戏,比如仙剑,轩辕剑等等。不过JYY喜欢的并不是战斗场景,而是类似电视剧一般的充满恩怨情仇的剧情。这些游戏往往 都有很多的支线剧情,现在JYY想花费最少的时间看完所有的支线剧情。 【问题描述】 JYY现在所玩的RPG游戏中,一共有N个剧情点,由1到N编号,第i个剧情点可以根据J原创 2015-04-06 23:51:27 · 3688 阅读 · 0 评论 -
hdu某道题
题目大意:给出一棵树,求以i为根节点的子树中有多少个节点标号比i小 得到dfs序之后,用树状数组求第i个数之前比第i个数小的数的个数 ans[i]=ed[i]-st[i];#include <iostream>#include <cstdio>#include <cstring>#include <cstdlib>using namespace std;#define MAXN 100原创 2015-08-09 23:17:55 · 430 阅读 · 0 评论 -
hdu5423
题目大意:给出一张n个点n条边的无向图,判断这张图中是否存在哈密顿回路。分析:存在哈密顿回路:这张图要连通,有一条回路经过每个点一次。dfs的时候每次只能从点x向一个未访问过的点y走,不能再由y回溯到x走x的其它相邻点,保证只经过每个点一次。所以dfs是在循环外调用的。为了优化,每次取x相邻的未访问过的度数最小的点扩展。#include #include #include原创 2015-08-29 21:56:25 · 507 阅读 · 0 评论 -
noip2013truck树上路径倍增
#include #include #include #include #include using namespace std;#define INF 0x7fffffffint n,m,x,y,z,l,s,u,v,q;bool vis[10010];struct point{ int x,y,z;}a[50010];struct node{ int y,z,next;原创 2015-11-07 22:45:43 · 811 阅读 · 0 评论 -
BZOJ 4152: [AMPPZ2014]The Captain
本来可以考虑每两个点之间连一条边 O(n^2)但是如果两个点之间连了一条x的边,中间还有一个点,那么|x_i - x_a|+|x_a - x_i+1| = |x_i - x_i+1|可以只连i 到a的x的边和a到i+1的x的边y同理只连排序后的相邻的边用dijkstra 跑一遍最短路。稳定的时间复杂度O(nlogn) 可以过为什么不用spfa呢。。。因为时间复杂度不稳定,理论上原创 2016-01-01 22:42:17 · 1208 阅读 · 0 评论 -
Codechef CHEFPRES—LCA
CHEFPRES所谓一眼题,但是通过这道题学了c++的vector...只想表示学语言什么的看别人代码最快了。。不想啃书#include #include #include #include #include #include using namespace std;#define MAXN 100010#define MAXK 110vector a[MAXK];原创 2015-12-23 00:34:12 · 541 阅读 · 0 评论 -
网络流初步
问题描述:找从源点s到汇点t能流过的最大流量最大流问题Ednonds-Karp每次增广的时候用BFS,这样不用找所有可能增加的流量,减少了循环次数。复杂度 O(VE^2) 适用于几百的数据,可以直接用邻接矩阵存储,要存反向边poj1273 注意两个顶点间可能有多条边,相加即可,这也是邻接矩阵的好处 cap[][]表示初始的容量 flow[][]表示当前增广的原创 2015-12-23 19:54:04 · 623 阅读 · 0 评论 -
uva11354 找瓶颈路径——并查集按秩合并
在做最小生成树的时候,使用并查集的按秩合并,不会破坏树的结构,复杂度O(logn)#include <bits/stdc++.h>using namespace std;#define INF 1000000009#define N 50010int n,m,q,x,y;int fa[N],Rank[N],edge[N],c[N];struct node{ int...原创 2018-09-23 13:44:39 · 272 阅读 · 0 评论 -
最小费用最大流(邻接矩阵和邻接表)
邻接矩阵:var t,ii,i,j,n,cost,top,tail,min,tt,ttf:longint; pre,d:array[1..1000]of longint; b:array[1..10000]of longint; flag:array[1..1000]of boolean; f,c:array[1..200,1..200]of longint;原创 2015-03-16 23:35:51 · 843 阅读 · 0 评论 -
二分图最佳匹配(网络流)
var t,ii,i,j,n,cost,top,tail,min,tt,ttf:longint; pre,d:array[1..1000]of longint; b:array[1..10000]of longint; flag:array[1..1000]of boolean; f,c:array[1..200,1..200]of longint;begin原创 2015-03-16 23:54:04 · 1592 阅读 · 0 评论 -
dijkstra pascal
program dijkstra;var n,m,s,t,i,j,x,y,w,l,min,p,tt:longint; head,d:array[1..1000]of longint; open:array[1..1000]of boolean; edge:array[1..100000,1..3]of longint;begin read(n,m); read(s,原创 2014-08-07 00:33:07 · 1224 阅读 · 0 评论 -
LCA的tarjan算法理解
转自:http://scturtle.is-programmer.com/posts/30055.htmltarjan算法的步骤是(当dfs到节点u时):1 在并查集中建立仅有u的集合,设置该集合的祖先为u1 对u的每个孩子v: 1.1 tarjan之 1.2 合并v到父节点u的集合,确保集合的祖先是u2 设置u为已遍历3 处理关于u的查询,若查询(u,v)转载 2014-08-07 23:14:58 · 471 阅读 · 0 评论 -
二分图匹配之匈牙利算法和 二分图匹配的几种题型
首先介绍匈牙利算法。原创 2014-08-07 21:08:35 · 507 阅读 · 0 评论 -
poj1236强连通分量+缩点
一开始脑子秀逗地算出最多边数为2原创 2014-08-31 01:59:05 · 585 阅读 · 0 评论 -
lca倍增算法
HDU2586要注意只有简单边相连的图是一棵树,树有n-1条边原创 2014-08-17 23:22:40 · 3203 阅读 · 0 评论 -
vijos P1790拓扑编号
描述H国有n个城市,城市与城市之间有m条单向道路,满足任何城市不能通过某条路径回到自己。现在国王想给城市重新编号,令第i个城市的新的编号为a[i],满足所有城市的新的编号都互不相同,并且编号为[1,n]之间的整数。国王认为一个编号方案是优美的当且仅当对于任意的两个城市i,j,如果i能够到达j,那么a[i]应当优美的编号方案有很多种,国王希望使1号城市的编号尽可能小,在此前提原创 2014-10-26 22:46:49 · 1140 阅读 · 0 评论 -
tarjan求lca
program lcastat;var ans,ans1:int64; w:array[1..10000000]of longint; father,head:array[1..10000000]of longint; i,n,p,l:longint; vis:array[1..10000000]of boolean; edge:array[1..1000原创 2014-10-04 21:56:05 · 602 阅读 · 0 评论 -
求最小环(floyd,dijkstra)
给出一个无向图,求图中的最小环。利用floyd f[k,i,j]的性质来求。program tt;const max=1000000;var n,m,i,j,k,x,y,z,ans:longint; f,g:array[1..100,1..100]of longint;function min(a,b:longint):longint;begin if a<b then原创 2014-12-21 23:06:11 · 1995 阅读 · 0 评论 -
vijosP1524网络流最小割
由于yxy小朋友做了一些不该做的事,他被jzp关进了一个迷宫里。由于jzp最近比较忙,疏忽大意了一些,yxy可以在迷宫中任意走动。整个迷宫可以被看作是一个无向图。迷宫中有一些结点有传送点,可以让他逃离这个迷宫。jzp发明了一种机器人,可以监视迷宫中的道路,被监视的道路yxy不能通过,我们简单的认为监视一条道路的代价即为这条道路的长度。现在jzp正在忙,请你编一个程序算出使yxy无法逃离迷宫的最小监原创 2015-01-03 17:31:41 · 726 阅读 · 0 评论 -
vijosp1697平面几何——带权并查集
一、一些概念 xor:亦或,相同为0,不同为1 or:或,有一个为1则为1 本题中用0代表平行,1代表垂直 way[i]表示i与i的father[i]是垂直还是平行(值为0或1) 题目中读入的平行垂直关系和way[]表示的都是两个直线之间的平行垂直关系,因此都用xor运算 二、并查集的程序段 1、找父亲 function getfather(x:longint):longint;原创 2015-03-01 17:22:07 · 576 阅读 · 0 评论 -
poj2135Farm Tour——最小费用最大流
题目要求从1到n走一遍再从n到1走一遍而且有重边,相当于从1到n走两边所以加一个源点01,费用为0,流量为2加一个汇点n+1n,费用为0,流量为2中间的边流量为1(只走一遍),费用为c然后一遍0->n+1的费用流要注意是无向图,所以一个输入有4条边a->b ,c,1b->a ,-c,0b->a ,c,1a->b ,c,0type point=reco原创 2015-03-16 23:43:44 · 557 阅读 · 0 评论 -
BZOJ2118 墨墨的等式[一个图论模型]
由于某些原因,题解之后再写好久没有这么开心的写代码了,但是还有2个小细节没注意到qwq,下次注意。//BZOJ2118//图论模型#include <iostream>#include <cstdio>#include <cstring>#include <cstdlib>#include <queue>using na...原创 2019-07-08 15:39:27 · 335 阅读 · 0 评论