图论 ------ 拓扑序 LCA MST
文章平均质量分 72
orz11111111
这个作者很懒,什么都没留下…
展开
-
BZOJ 1015 星球大战 逆向并查集
题意:n点m条边的图,k次操作:每次删去一个点及其所有边时 问此时图中的连通分量个数?n,m逆着考虑简单多了.维护当前可以使用的点.从后开始加点.用并查集维护连通分量个数即可.#include using namespace std;typedef long long ll;const double eps=1e-6;const int N=6e5+20;int n,m,原创 2017-08-26 08:24:47 · 244 阅读 · 0 评论 -
美团 18 Round1 C-城市漫游 思维+LCA
题意:n个节点的树,每条边有权值w[i]和至少要经过的次数L[i].n,Q<=1e5,w[i],1<=l[i],w[i]<=1e9 . Q次询问,问从s->t 满足所有边的L值时,需要的最小花费.s-t路径上的边其l[i]值为奇数 则显然正好可以满足.若为偶数 则需要多走一次.除了s-t路径上的边,显然都要从从(s,t)出发然后在回到(s,t).于是其l[i]值为偶数的可以...原创 2018-07-03 14:14:59 · 202 阅读 · 0 评论 -
CS 400 Root LCA Queries 思维+LCA
题意:n个节点的树,Q次询问,每次询问(a,b,c)问有有多少个D,使得以D为根时,LCA(a,b)=c1树上任意两点只有唯一路径,a->b = a->LCA(a,b)->b 若c没有出现在a-b的路径中 则lca(a,b)不可能为c.判断c是否在a-b路径中 只要知道dist(a,c)+dist(c,b)是否等于dist(a,b).若c在a-b路径中 那么满足条原创 2018-03-21 18:43:21 · 122 阅读 · 0 评论 -
CS 400 Digit Permutation 思维+拓扑序
题意:给出n行,第i行有m个数字 每个数字范围为0~k-1.求出一个[0..k-1]的排列p,使得将n行中,数字x与p[x]替换后满足以下条件.每行都没有前导0,从1行往下,每行的字典序递增.k,n*m第i行字典序要大于第i-1行 则从左往右比较第一个不相同得数字分别为d1,d2 (d1!=d2) ,显然p(d1)现在得到n-1个关于p得限制 若这n-1条限制都满足 则原创 2017-12-13 18:51:03 · 395 阅读 · 0 评论 -
HDU 5424 Rikka with Graph II 哈密顿路径+dfs找环
HDU 5424题意:给出n点n条边的图,问是否存在哈密顿路径(经过每个点正好一次) nn个点n条边,先找到图中的环(自环没用),则环上最多只能有两个点度数==3不在环上的点 度数不能超过3.图形向"只"形状 显然有解.dfs时 用栈保存当前未遍历完的点 如果u-v v在栈内 则从栈中v开始到u为一个环.#include using namespace std;co原创 2017-11-13 21:55:14 · 272 阅读 · 0 评论 -
CS 300 X Distance 思维+并查集
CS 300题意:n点m条带权边的图,定义一条路径的代价为:该路径中边最大的权值.n,m权值大于x的边不管,反正不可能经过这些边.枚举权值为x的一条边.通过该边可以扩展出一个联通分量.若去掉权值为x的边后,新图还是联通,则新图上的任意两点都可以不通过x互相到达. 该边不可能作为最小代价的最大权值边.否则(u,v)该边贡献就为 u左右和v右边的点个数相乘. 若原创 2017-10-24 13:06:26 · 187 阅读 · 0 评论 -
HDU 5195 DZY Loves Topological Sorting 拓扑序(贪心)
HDU 5195题意:n个点 m条有向边的DAG, 现在生成[1..n]的排列,若有边u->v,则说明在排列中u出现在v之前.n,m,k靠前的尽量大,把当前位置能选的点都加入到队列中,即入度每次弹出一个最大的 并更新k,和其他定点的度. 若该点度数>k或者已经被访问,则继续下一个元素.删除u时遍历u的所有边 每条边都只会被遍历一次 复杂度应该在O(m+n)左右.原创 2017-10-14 15:22:39 · 226 阅读 · 0 评论 -
BZOJ 1191 超级英雄Hero 二分图最大匹配(水)
题意:n件物品,有m个问题,回答第i个问题需要用到物品编号a[i]或者b[i]其中一个.n,m左边定点为问题 右边为物品 问题向物品连边,跑二分图的最大匹配即可. 小坑,一题回答完才能进入下一题.#include using namespace std;typedef long long ll;const int N=2e3+5;int n,m,x,a[N][N],vis[N]原创 2017-10-04 16:22:54 · 197 阅读 · 0 评论 -
HDU 5266 pog loves szh III 区间的LCA,ST表
HDU 5266题意:以1为根,n个节点的树.Q次询问,每次询问[L,R],问编号L,L+1..R.这R-L+1个节点的LCA是多少?n,QLCA(a,b)=x, LCA(c,d)=y. 则LCA(a,b,c,d)=LCA(x,y).设F[k][i]为以i开头长度为2^k的区间的LCA. 用RMQ处理即可.#pragma comment(linker, "/STACK:原创 2017-10-18 09:45:40 · 264 阅读 · 0 评论 -
BZOJ 1059 矩阵游戏 二分图匹配
题意:n*n(01)矩阵,操作:交换任意两行或者任意两列. n原本在同一行或者同一列的点,经过操作后,还是在同一行或者同一列,同行同列上的两个点肯定不能同时作为主对角线元素问题可以理解为 能否找到n个黑点,其任意两个不同行并且任意两个不同列.二分图建图:左边为行 右边为列 若a[i][j]为黑点 则i->j连边. (i,j)边若在匹配被选中,则表示把(i,j)行换到(j,j原创 2017-09-12 15:03:09 · 229 阅读 · 0 评论 -
HDU 5521 Meeting 建图+最短路
Problem M:题意:n个点的图,现在有m个集合,第i个集合为e[i],有s[i]个点,集合e[i]内的点都可以互相到达并且时间为t[i].n直接加边,边数太多显然不行.建图:对第i个集合 增加一个源点,每个点向源点连t[i]代价的边,此时跑出的最短路为原先的两倍,除以2即可.求出源点1出发 和源点n出发的最短路 枚举最后的终点 答案为min(mn,max(d[1]原创 2017-09-19 09:05:52 · 288 阅读 · 0 评论 -
BZOJ 1016 最小生成树计数 暴力
题意:给定一张简单无向加权图,求其最小生成树方案数.n结论:MST不同,但包含边值都是一样的.比如MST有3条边权为2的边.其他任意MST也都正好有3条边权为2的边.因为添加完某种val边 形成的连通分量个数是一定的.先求出某个MST,记录val边使用次数,然后对每种val边暴力枚举有多少种方案.累乘即可.#include using namespace std;typed原创 2017-09-01 09:58:21 · 254 阅读 · 0 评论 -
BZOJ 1002 轮状病毒 生成树计数(行列式递推)
题意:如图所示的n轮环形图.只保留其n-1条边,并且每两点都要有唯一路径存在.n给出图求其生成树个数,先建下Kirchhoff Matrix,求出其n-1阶行列式的值就好了.然而这题求行列式的时候精度好像炸了,把行列式展开后有递推关系 参考链接:点击打开链接 点击打开链接#include using namespace std;typedef long long ll;c原创 2017-08-27 14:26:45 · 339 阅读 · 0 评论 -
HDU 4547 CD操作 LCA
题意;n个结点的树,根到任意一个结点只要一秒,子结点往根走需要1秒.m次询问,u->v的最小时间. n,mu->v = u->lca(u,v)->v 时间为u到lca(u,v)的距离加上1用倍增处理出lca即可.O(nlogn).注意u-v相同的情况和n==1的情况.#include using namespace std;const int N=2e5+20;cons原创 2017-08-21 22:25:00 · 194 阅读 · 0 评论