02 2019 档案
摘要:题目链接:传送门 思路: 就是简单的找欧拉回路,不过要注意dfs边时要将边的编号/2,不然会分不清那条边每被遍历。 #include<iostream> #include<cstdio> #include<cstring> using namespace std; const int maxn =
阅读全文
摘要:题目链接:传送门 思路: 求割点的同时求割点删除后所剩的不连通的点的对数,在遍历完成后回溯统计点的个数,具体操作见代码; 注意:结果是long long 类型。 #include<iostream> #include<cstdio> #include<cstring> using namespace
阅读全文
摘要:题目链接:传送门 思路: 2-sat问题,如果选每个集合最多有两个元素,eg:(Ai,Ai’),(Bi,Bi’); 如果Ai,Bi冲突,就只能选Ai,Bi’(建立边),然后缩点,查找有无相同集合的点在同一个集合中。 然后将区块节点较小的先输出。 具体的2-sat问题(还是比较懵) #include<
阅读全文
摘要:题目链接:传送门 思路: 强连通缩点,重建图,然后广搜找最长路径。 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int maxn = 1e6+
阅读全文
摘要:题目链接:传送门 思路: 缩点求最值,但是有一点行不通,如果被选中的点才能缩点,否则缩点没有意义; 所以就先缩选中的点,然后从小到大统计没有缩点的点,就是NO; 如果找最小值,就是一个环里的最小值,然后求和就好了。 注意: (1)预处理si和mon (2)对选中的点缩点,不然全部缩点后比较麻烦 #i
阅读全文
摘要:题目链接:传送门 思路: 先缩点,然后统计入度为0的点即可。 #include<iostream> #include<cstdio> #include<cstring> using namespace std; const int maxn = 1e6+10; int num[maxn],low[m
阅读全文
摘要:题目连通:传送门 思路: 题目定义很清晰,然后就不会了QAQ…… 后来看了书,先缩点,然后再用拓扑排序找到最长的链子的节点数(因为缩点后所有点都是一个强连通分量,所以找最长的链子就是最大限度包含 点的半连通子图)然后用dp求出由多少个长度相同的链子(e数组记录从开始到i节点所有的方案数,dis数组表
阅读全文
摘要:题目链接:传送门 思路: 多少头牛收到所有牛头牛的喜欢,喜欢具有传递性,所以将互相喜欢的牛视为一个点,就是有向图的 缩点,收到所有牛的喜欢要求这个“点”没有出度,所以缩点之后统计所有没有出度的点就是结果,如果有多头牛没有出度, 就说明图不连通,答案为0。 #include<iostream> #in
阅读全文
摘要:一、基本概念 1、强连通图:对于有向图来说,任意两点u,v之间都有一条路径,则有向图G是一个强连通图。 2、强连通子图:有向图G’一个强连通图,且是有向图G的一个子图。 3、强连通分量:有向非强连通图的极大强连通子图称为连通分量。 4、极大强连通子图:G是强连通子图且不存在另一个强连通子图G’使得G
阅读全文
摘要:题目链接:传送门 思路: 用并查集统计出每个区块奇数个节点的个数x,每个区块对笔画的贡献是max(x/2,1); 然后每个区块求和即可。 #include<iostream> #include<cstring> #include<cstdio> using namespace std; const
阅读全文
摘要:题目链接:传送门 思路:就是判断无向图的欧拉回路的两个条件:(1)连通性(2)点的度数是偶数 注意:两个条件一同时满足才行。 #include<iostream> #include<cstdio> #include<cstring> using namespace std; const int ma
阅读全文
摘要:题目链接:传送门 思路: (1)将每个单词视为有向路径,单词的起始字母是起始节点,末尾字母是终止节点,然后找由字母建立的有向图 是否是欧拉图或者半欧拉图。 (2)先用并查集判断是否连通,再判断入度与出度的·关系是否符合要求。 有向图的欧拉图的判断 #include<iostream> #includ
阅读全文
摘要:欧拉回路:图G经过每条边一次且仅一次的回路称为欧拉回路 欧拉路径:图G经过每条边一次且仅一次的路径称为欧拉路径 定理: 无向图 (1)无向图G为欧拉图,当且仅当G为连通图,且所有点的度数为偶数; (2)无向图G为半欧拉图,当且仅当G为连通图,且除了两个节点的度数为奇数外,其他节点的度数均为偶数。 有
阅读全文
摘要:题目链接:传送门 思路: (1)用邻接表存储有向图和无向图,有向图和无向图的每条边均站两个单元,无向图有正向边和反向边的区分。 (2)有向图有欧拉回路:所有点的入度=出度; 无向图有欧拉回路:所有点的度数之和是2的倍数。 (3)搜索时要从存在的点开始搜索,注意每条边站两个单位,所以i/2。 (4)搜
阅读全文
摘要:题目链接:传送门 思路:求A到B之间必要的中间节点 条件:(1)只有一条路径经过中间节点;(low[B]>=num[u]&&num[v]<=num[B],没有从B到u的路径) (2)中间节点不能和A,B重合(u!=A&&num[v]<=num[B],先v后B) (3)中间节点一定是割点(num[u]
阅读全文
摘要:题目链接:传送门 思路: (1)这道题的图可能不连通,所以需要多次Tarjan; (2)设置cut[i]=x数组表示第i个节点被删除后右多少个子图(这个只是在一个图中),如果是根节点就要-1,因为根节点都满足 num[v]==low[u]. (3)mx的初始值设为最小值(-9999999),因为有可
阅读全文
摘要:题目链接:传送门 思路:找桥就行了,条件是num[v]<low[u],pre!=v; #include<iostream> #include<cstdio> #include<cstring> #include<vector> #include<algorithm> #include<stack>
阅读全文
摘要:题目链接:传送门 思路: 就是求割点的个数,直接Tarjan算法就行。 注意输入格式(判断比较水)。 #include<iostream> #include<cstdio> #include<cstring> #include<vector> #include<string> #include<st
阅读全文
摘要:题目链接:传送门 思路: 如果图是点双联通的,即没有割点,直接从图中随意选两个点即可; 如果有一个割点,删除割点,求连通块的个数即可(在每个连通块内新建一个营救点)。 如果有多个割点,则可以通过其他割点到达,就不用新建营救点。 #include<iostream> #include<cstdio>
阅读全文
摘要:题目链接:传送门 思路: 题目要将使每一对草场之间都有至少两条相互分离的路径,所以转化为(一个有桥的连通图至少加几条边才能变为双联通图?) 先求出所有的桥的个数,同时将不同区块收缩成一个点(利用并查集),之后一个图变为了一颗树; 然后在统计树中度数为1的点的个数,记为cnt,则至少添加(cnt+1)
阅读全文
摘要:一、相关概念 1、点连通度:最小V的点数(一个图的点的连通度是最小割点集合中的顶点数) 2、边连通度:最小E的边数(一个图的边的连通度是最小割边集合中的顶点数) 3、割点:去掉割点这个图不连通(点连通度为1时,V的唯一元素) 4、割边(桥):去掉割边这个图不连通(边连通度为1时,E的唯一元素) 5、
阅读全文
摘要:题目链接:传送门 思路:对于2^n个数,总共有4^n种两两组合, 考虑每个数的每一位,总共有(0,1)(0,0)(1,0)三种情况,所以只要3^n种就行了。
阅读全文
摘要:题目链接:传送门 思路:每隔2^i(0<=i<=INF)就有一条路径,所以可以将从头到尾的路线视为一个有向图, 将ai,bi以此输入,然后将路径从小到大排序,不断更新路径。 __builtin_popcount (unsigned u)函数可以以O(1)的复杂度计算u的二进制中的数字1的个数。 #i
阅读全文
摘要:并查集:就是有求并集,查找元素属于哪个集合的功能。 1、路径压缩:使X到根上的每一个节点的父节点都变为根节点。 查询: 合并: 2、按秩合并:使较浅的树成为较深的树的子树。 查询: 合并: 例题:hdu1232 解法一:路径压缩 #include<iostream> #include<cstdio>
阅读全文
摘要:题目链接:传送门 思路: 二维树状数组, vector(first,last)函数中assign函数相当于将first中的函数清空,然后将last中的值赋值给first。 参考文章:传送门 #include<iostream> #include<cstring> #include<cstdio> #
阅读全文
摘要:题目链接:传送门 思路: 如果当前值a[i]是奇数,就让a[i+1]--,ans++,由于可以是一次吃两个相同的,或者一次吃两个相邻的, 所以就可以将它们看为连起来的,然后再去求解。 注意:ans是long long类型。 #include<iostream> #include<cstdio> #i
阅读全文
摘要:1、冒泡排序:每次将最大或最小值通过交换放到数组前面。 2、插入排序: 由n-1趟排序组成,对于从P=1到P=n-1趟排序,每次排序保证从0到P之间的元素为已排序状态(即0~P-1是排好序的)。 3、希尔排序: 通过比较相距一定间隔的元素来工作,这些间距序列h1,h2,……,hn又称为增量序列,相当
阅读全文