图论
文章平均质量分 73
普通网友
这个作者很懒,什么都没留下…
展开
-
一些思索 关于有环图的最长路
学了树的直径,那么图中能不能有直径呢,那么求有环图的最长路要怎么求呢;spfa赋值为负求最小值,会因为有负环无法计算用targin缩点变成无环图,然后求最长路,但是这样就没法保证这个最长路上加上环的一半的值是最长的,万一有个比最长路还长的环。。。难道只能每个点暴搜。。感觉好麻烦有没有哪位大佬给我指点指点的多谢原创 2017-09-28 23:28:01 · 854 阅读 · 0 评论 -
codeforces 878C 及部分set的用法
参考的题解:http://blog.csdn.net/weixin_37517391/article/details/78374840非常清楚与详尽,点赞#include using namespace std ;const int maxn = 15 ;struct node{ int cap ; int num ; int max_vector原创 2017-11-15 23:59:30 · 507 阅读 · 0 评论 -
计算客 - 热爱工作的蒜蒜 - spfa
只有100个点,最短路预处理所有 i 到 j 的最短路,松弛操作时同时更新在最短路条件下该段路经过的避雨路段数(即路长) 。然后暴力所有区间,O(n2)判断是否起点+该区间+到终点的路长小于 要求 p = dis[1][i] + dis[i][j] + dis[j][n] ; q = num[1][i] + num[i][j] + num原创 2017-10-25 10:17:27 · 606 阅读 · 2 评论 -
hdu 5943 二分图匹配
注意,并不是区间上存在超过2个素数就不成立当n > s 时 , 该条件不成立比如数据 125 1 2361 2事实上, 当n > s 时, 我们将s + 1 到 n 不动 , 此时只要判断 从n + 1 到 s + n 是否能成立即转换为输入系数为 s n 是否成立s = 0 是特判成立会快一些其余即二分图可解决#incl原创 2017-10-12 23:08:34 · 204 阅读 · 0 评论 -
hdu 5934 强连通 && 判断覆盖图的最少点
bomb a 能触发 b 则加一条a 到b 的边。用强连通缩点处理DAG中每个点的最小代价。覆盖图:所有出度为0的点必须要被覆盖,所有出度不为0的点均可由其他点覆盖。所以 : 只要所有出度为0的点, 就可以实现图的覆盖。#include #define mod 1000000007using namespace std ;typedef long long l原创 2017-10-12 09:31:39 · 316 阅读 · 0 评论 -
codeforce 449 B 最短路
codeforce 449 B题意: 一个无向图,给你两种边,一种边可以删除(全部从起点出发),问在不改变原来所有点最短路的情况下,能删最多多少条边。解: 由于可删边都从起点出发,松弛时候也不会返回起点,所以只需要建立从起点到另一点的单向边,然后进行一遍spfa,初始所有点的最短路的值,然后判断所有可删边,如果该边长比最短路的值长即可删,如果相等,再对到达的点进行判断,看能否由原创 2017-10-29 00:09:03 · 435 阅读 · 0 评论 -
poj 3613 floyd
题意: 求进过路径数量为k的已知起点的最短路 ;先进行在线离散化。然后Floyd 矩阵快速幂。注意 如果结构体中数组大小开太大 (大概极限是350乘350)的话不能动态使用,就是将结构体导入导出函数,需要在外部声明一个常量的结构体,对其进行改变。//#include #include #include #include #include #include us原创 2017-10-29 00:04:58 · 281 阅读 · 0 评论 -
poj 1201 差分约束
1431ms 将所有约束条件的边建立,然后spfa输出最大值与最小值之差//#include #include #include #include #include #include using namespace std ;const int inf = 0x3f3f3f3f ;const int maxn = 50005 ;struct edge{ in原创 2017-10-28 23:59:38 · 216 阅读 · 0 评论 -
汉密尔顿图
#include#include#include#includeusing namespace std;#define maxn 1111int n,ans[maxn],vis[maxn];bool M[maxn][maxn];void reverse(int l,int r){ while(l<r) { swap(ans[l],ans[r]);原创 2017-10-27 20:25:19 · 1568 阅读 · 0 评论 -
同余最短路
第一个是判断 给你 n 个数,问a 是否能由求和求到,求出每一个数%最小的数的最小出现值,比较大小即可,用最短路建图#include using namespace std;typedef long long ll ;const int INF = 0x3f3f3f3f ;ll save[5050] ;ll dis[50050] ;ll point , road , mod ;原创 2017-10-27 20:21:51 · 658 阅读 · 0 评论 -
codeforce 543 B 最短路
预处理所有最短路。然后暴力所有区间,check是否满足条件然后进行松弛操作#include using namespace std ;typedef long long ll ;const int inf = 0x3f3f3f3f ;const int maxn = 3050 ;struct edge{ int u , v ; int w ;};vector原创 2017-10-27 20:18:28 · 447 阅读 · 0 评论 -
codeforce 416 E floyd
最短路求最短路经过的所有路径,一般点不多,都可以暴力所有区间,check是不是最短路的一部分注意 这里的cnt是最后一层的,而不是所有的#include using namespace std ;typedef long long ll ;const int inf = 0x3f3f3f3f ;const int maxn = 550 ;int edge[maxn][max原创 2017-10-27 20:15:15 · 398 阅读 · 0 评论 -
codeforce 623 A
因为只有a b c , b 和其他都联通, 从这里突破#include using namespace std ;typedef long long ll ;const int inf = 0x3f3f3f3f ;const int maxn = 550 ;bool g[maxn][maxn] ;int deg[maxn] ;bool vis[maxn] ;char原创 2017-10-27 20:08:57 · 335 阅读 · 0 评论 -
Highest Tower
矩形转图论#include using namespace std;typedef long long ll ;const ll maxn = 250050 ;map ma ;int main(){ ll n , s , t , vertice , edge , max_vertice; ll ans = 0 ; //while( ~原创 2017-10-09 16:05:51 · 339 阅读 · 0 评论 -
2017acm/icpc北京赛区网络赛 Agent Communication 二分+搜索
前提知识点:树的直径,及记录方法:从图中任取一点dfs,搜到最远点为起点,再进行一次搜索,搜到最远点为终点记录:从起点dfs,搜的过程存入数组,搜到终点返回题意: 可以在树中连一条边,求连边之后的最长路的最短值,(所有的最大的最小或最小的最大都要考虑下二分)。易得,连边的起点和终点一定在树的一条直径上。预处理出所有点间的距离,(由于是树,搜索就可以了)求出任意一条直原创 2017-09-29 23:44:17 · 299 阅读 · 0 评论 -
树链剖分模板
样题链接http://www.spoj.com/problems/QTREE/模板如下:#include using namespace std ;typedef long long ll ;const int maxn = 1e4 + 5 ;int deep[maxn] ;int size[maxn] ;int father[maxn] ;int son[m原创 2017-11-26 18:47:05 · 205 阅读 · 0 评论