随笔分类 - ---图论---
摘要:题目链接:hdu 5521 Meeting 题意: 有n个点,m个集合,每个集合之间的点到达的时间是相同的。 问一个人从1出发,一个人从n出发,他们相遇的最小时间是多久。 题解: 对于第i个集合,新设立一个点n+i,然后addedge(n+i,x,time),addedge(x,n+i,time)
阅读全文
摘要:题目链接:hdu 6166 Senior Pan 题意: 给你一张有向图,现在选出k个点,问这k个点中,所有的点对的距离中,最短的那条是多少。 题解: 官方题解说的很清楚了。 类比cf 835E,枚举二进制位按照标号当前位为1 和当前位为0分为两个集合,每次求解两个集合之间的最短路即可覆盖到所有的点
阅读全文
摘要:题目链接:hdu 6118 度度熊的交易计划 题意: 中文,说的很清楚了。 题解: 对着输入建一些图,跑一下可行费用流就行了,即当费用为正的时候就不跑了,这样就先满足了费用最小。 1 #include<bits/stdc++.h> 2 #define F(i,a,b) for(int i=(a);i
阅读全文
摘要:题目链接:hdu 6071 Lazy Running 题意: 给你4个点,每两个相邻点有一个距离,现在让你在这四个点来回跑步,从2开始,最后回到2,问你找一个距离ans,ans>=k,问最小的ans是多少。 题解: Claris的官方题解: 1 #include<bits/stdc++.h> 2 #
阅读全文
摘要:题目链接:hdu 5413 CRB and Roads 题意: 给你一个n个点的有向无环图,定义重复边为 对于一条边u->v,如果去掉这条边,u还是等到达v,则u->v是重复边。 问有多少条重复边。 题解: 显然有向无环图,先拓扑排序一下,这样排在前面的节点可能到达后面的节点,我们再将边的关系按照拓
阅读全文
摘要:题目链接:hdu 5772 String problem 题意: 给你一个字符串,只含有数字。 你需要选择出一个子序列,使得这个子序列的权值最大。 这个子序列如果这个数字第一次出现就ans-=bx,否则就-=ax 然后如果第i个字符和第j个字符都在子序列里面,那么ans+=w[i][j] 问你最大a
阅读全文
摘要:题目链接:Helvetic Coding Contest 2017 online mirror N. April Fools' Problem (medium) 题意: 有n天,每天产生一个想法要价值a[i],打印一个想法要b[i], 现在要打印出k个想法,必须要先产生才能打印,问最小的费用。 这里
阅读全文
摘要:题目链接:Educational Codeforces Round 21 F. Card Game 题意: 有n个卡片,每个卡片有三个值:p,c,l; 现在让你找一个最小的L,使得满足选出来的卡片l<=L,并且所有卡片的p的和不小于k。 选择卡片时有限制,任意两张卡片的c之和不能为质数。 题解: 和
阅读全文
摘要:题目链接:hdu 1565 方格取数(2) 题意: 有一个n*m的方格,每个方格有一个数,现在让你选一些数。使得和最大。 选的数不能有相邻的。 题解: 我们知道对于普通二分图来说,最大独立点集 + 最小点覆盖集 = 总点数,类似的,对于有权的二分图来说,有: 最大点权独立集 + 最小点权覆盖集 =
阅读全文
摘要:题目链接: Codeforces Round #406 (Div. 2) D. Legacy 题意: n个点,m条边,起始点为s。一共有三种建边方式。 1:建立一条a->b权值为c的单向边、 2:建立一条v->[l,r]权值为d的单项边。 3:建立一条[l,r]->v权值为d的单项边。 求起点到各个
阅读全文
摘要:题目链接:hdu 6026 Deleting Edges 题意: 给你n个点,和一个邻接矩阵,非0表示有边,0表示没边。 现在让你删一些边,构成一棵树,使得每个点到0这个点的距离为没删边之前的最短路。 问有多少棵这样的树。 题解: 首先,题意说从0点开始对每个点都最短路,那么用单源最短路就能搞定。
阅读全文
摘要:题目链接:hdu 1704 Rank 题意: 有n个人,m场比赛,a与b打,每场都是awin,问不能确定其中两个人的win情况数。 题解: floyd传递闭包,这里我用bitset优化了一下。 1 #include<bits/stdc++.h> 2 #define F(i,a,b) for(int
阅读全文
摘要:题目链接:hdu 1706 The diameter of graph 题意: 给你一个图,定义图的直径为所有两点距离最短路中的最长的那条。 问图的直径为多长,有多少条。 题解: 将folyd改一改,加一个计数的数组就行了,然后就是注意重边的处理。 1 #include<bits/stdc++.h>
阅读全文
摘要:题目链接:Codeforces Round #400 D. The Door Problem 题意: 有n扇门,每扇门有个初始状态,并且受两个开关控制。 现在给你m个开关控制门的信息,每个开关能将它所控制的门的状态翻转。 问能不能通过一定操作,将所以的门的状态都处于开的情况。 题解: 这题用2sat
阅读全文
摘要:题目链接:hdu 2807 The Shortest Path 题意: 如果矩阵A*B=C,那么就表示A-->B有一条单向路径,距离为1. 给一些矩阵,然后问任意两个矩阵直接的距离。 题解: 把矩阵读进来后处理一下邻接矩阵,然后Folyd一下。 1 #include<cstdio> 2 #inclu
阅读全文
摘要:题目链接:Floyd-Warshall 题意: 给你n个点,m条边,100>m-n>0,现在有q个询问,问你任意两点的最短距离,题目保证每条边都被连接,每条边的距离为1 题解: 首先我们可以看到边最多只比点多100个,那么我们可以先将n-1条边生成一棵树,然后用LCA来求最短距离。 然而有可能最短路
阅读全文
摘要:题目链接:Around the World 题意: 给你n个点,有n-1条边,现在这n-1条边又多增加了ci*2-1条边,问你有多少条欧拉回路 题解: 套用best定理 Best Theorem:有向图中以 i 为起点的欧拉回路个数为以 i 为根的树形图个数 ×(( 每个点 度数 −1)!)。 Ma
阅读全文
摘要:题目链接:hdu_5883_The Best Path 题意: n 个点 m 条无向边的图,找一个欧拉通路/回路使得这个路径所有结点的异或值最大。 题解: 节点 i 的贡献为((du[i] +1/ 2) % 2)* a[i] 如果为欧拉回路,需要枚举一下起点,然后取一下最大 1 #include<b
阅读全文
摘要:题目链接:hdu_5889_Barricade 题意: 有n个点,m条边,每个边的长度都为1,每个边有一个消耗w,如果要阻断这条路,那么就会消耗w,现在让你阻断点1到点n的所有最短路,问你最小的消耗是多少 题解: 先用dij算出最短路,然后再枚举每一条边,如果dis[u]+1=dis[v],那么久在
阅读全文
摘要:题目链接:hdu_5876_Sparse Graph 附上叉姐的题解: 1009 Sparse Graph [by ftiasch] 题意:n 个点的无向完全图中删除 m 条边,问点 s 到其他点的最短路长度。 题解: 补图上的 BFS 是非常经典的问题。一般的做法是用链表(或者偷懒用 std::s
阅读全文

浙公网安备 33010602011771号