
图论
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 · 560 阅读 · 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 · 634 阅读 · 0 评论 -
ZOJ - (缩点求最长路)
#include#include#include #include #includeusing 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 · 496 阅读 · 0 评论 -
HDU 5361(dijkstra变形)
本题目直接套用dijkstra算法会超时的,因为每个点被更新的次数可能很多、那么dijkstra算法的核心是,去没有加入到(已经求得最短路的集合)外,d值最小的加入集合,并松弛连边,(证明 : 集合外权值最小的点,一定存在一条最短路,那么取这条最短上在集合外的第一个点v,那么这个点已经达到最优值,d[v] = best[ v] 对于本题目,有个特殊性,即从一点出发,到左右两个集合所有点原创 2015-08-10 09:10:36 · 413 阅读 · 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 · 430 阅读 · 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 · 902 阅读 · 0 评论 -
codeforces 983C(dp or shortest path)
一般而言规划题目侧重于思路,shortest path 也和规划一样需要建边,规划需要dag图,最短路只需要构成图即可,然后上单源最短路算法即可,实现上可能比较复杂。例如本题目而言,首先看状态设计,d[i][j][s],代表前i个已经上电梯或已经到达,当前在i层,电梯内人员情况(空位和要到达楼层)每个状态都可以往任意楼层走,然后上下乘客,但状态之间可能来回走来走去,可用dijstra算法。进一步分...原创 2018-05-19 09:14:09 · 506 阅读 · 0 评论