
图论
playwfun
宁静致远
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
UVA - 1423 (大小关系的拓扑排序)
#include #include #include #include #include #include using namespace std; const int maxn = 12; int n; char maze[maxn][maxn],str[maxn*maxn]; int vis[maxn]; vector son[maxn],topo; int ans[maxn]原创 2014-10-31 16:01:38 · 571 阅读 · 0 评论 -
UVA - 1364(无向图的bcc以及对bcc二分着色)
#include #include #include #include #include #include using namespace std; const int maxn = 1100; struct node{ int x,y; node(int x=0,int y=0):x(x),y(y){} }; int pre[maxn],bccno[maxn],dfs_clock原创 2014-10-31 13:33:38 · 647 阅读 · 0 评论 -
ZOJ - (缩点求最长路)
#include #include #include #include #include using namespace std; const int MAX=100011; int Stop;//栈中的元素个数 int cnt;//记录连通分量的个数 int visitNum;//记录遍历的步数 int DFN[MAX]; //记录节点u第一次被访问时的步数 int LOW[MAX];原创 2014-11-23 16:12:53 · 502 阅读 · 0 评论 -
HDU 5361(dijkstra变形)
本题目直接套用dijkstra算法会超时的,因为每个点被更新的次数可能很多、 那么dijkstra算法的核心是,去没有加入到(已经求得最短路的集合)外,d值最小的加入集合,并松弛连边, (证明 : 集合外权值最小的点,一定存在一条最短路,那么取这条最短上在集合外的第一个点v,那么这个点已经达到最优值,d[v] = best[ v] 对于本题目,有个特殊性,即从一点出发,到左右两个集合所有点原创 2015-08-10 09:10:36 · 423 阅读 · 0 评论 -
HDU 4781(图上的构造)
本题的两个条件: 首先,构造一个图,共有m条边,边权为1 - m互不相同。 图上任意两点间最多有一条有向边, 其次,任意一点经过任意路径回到该点的权值和对3取余为0。 分析: 首先构造一个n个边的有向环,1->2->3...->n->1 ,前n-1条边的权值为1->(n-1),而第n条边为(n,n+1,或者n+2)使得sum%3=0; 那么,这个有向环是符合题意的,只是一些边权为特定值原创 2015-08-25 08:27:06 · 444 阅读 · 0 评论 -
HDU 3760(最短路思路)
先倒着从n bfs一遍求出bfs树每层的节点,然后从1贪心的走回来就行了 这个贪心用两个queue即可实现。 #include #include #include #include #include using namespace std; typedef long long ll; typedef pair pii; #define rep(i , n) for(int i =原创 2016-05-10 19:36:12 · 920 阅读 · 0 评论 -
codeforces 983C(dp or shortest path)
一般而言规划题目侧重于思路,shortest path 也和规划一样需要建边,规划需要dag图,最短路只需要构成图即可,然后上单源最短路算法即可,实现上可能比较复杂。例如本题目而言,首先看状态设计,d[i][j][s],代表前i个已经上电梯或已经到达,当前在i层,电梯内人员情况(空位和要到达楼层)每个状态都可以往任意楼层走,然后上下乘客,但状态之间可能来回走来走去,可用dijstra算法。进一步分...原创 2018-05-19 09:14:09 · 521 阅读 · 0 评论