随笔分类 - 图论
PAT 1013Battle Over Cities
摘要:本题注意解题要点就是需要添加的边数就是删除对应点之后的连通块数减一。然后用dfs求出连通块数目然后将其减一即可。 参考代码如下:
阅读全文
PAT 1003 Emergency(Dijstra算法解决)
摘要:1003 Emergency (25 分) 1003 Emergency (25 分) 1003 Emergency (25 分) As an emergency rescue team leader of a city, you are given a special map of your co
阅读全文
Calling Circles(UVa 247)(Floyd 算法)
摘要:用Floyd算法求出传递闭包,然后用dfs求出每条连通分量。注意其中用到的几个小技巧:
阅读全文
Floyd(求每2个点之间的最短路)
摘要:稍微改变即可求传递闭包,即关心两点之间是否有同路:
阅读全文
Bellman-Ford算法(在边权可正可负时求最短路)
摘要:使用FIFO队列实现:
阅读全文
Buy or Build(UVa1151)
摘要:如果枚举每个套餐,并每次都求最小生成树,总时间复杂度会很高,因而需要先求一次原图的最小生成树,则枚举套餐之后需要考虑的边大大减少了。 具体见代码:
阅读全文
Keuskal算法模板
摘要:int cmp(const int i, const int j) { return w[i]<w[j]; }///间接比较函数,w[i]表示边i权值 int find_set(int x) { return p[x] == x ? x : p[x] = find_set(p[x]);} int Kruskal(){ int ans = 0; for (int i =...
阅读全文
公共表达式消除(UVa 12219)
摘要:紫书354页的题,将表达式树进行公共表达式消除,化为等价的图。因为需要判断某一个是否出现过,所以需要快速比较,采用哈希表的形式,将a~b与1~27一一对应,不采用0,因为0与0000是相同的,对于每一个树,都预先给予其一个编号,然后将其所表示的字符串化为27进制的数,然后递归建造其左右子树,如果发现
阅读全文
无根树转有根树模板
摘要:vector G[maxn]; void read_tree(){ int u,v; scanf("%d",&n); for(int i = 0; i < n-1; i++){ scanf("%d%d",&u,&v); G[u].push_back(v);///输入u相邻的点v G[v].push_back(u); ...
阅读全文
Dijkstra(迪杰斯特拉)模板
摘要:直接将模板封装在结构体里面。
阅读全文
<<操作,&0xff以及|的巧妙运用(以POJ3523---The Morning after Halloween(UVa 1601)为例)
摘要:<<表示左移,如a<<1表示将a的二进制左移一位,加一个0,&0xff表示取最后8个字节,如a&0xff表示取a表示的二进制中最后8个数字组成一个新的二进制数,| 运算符表示对2个数的二进制位进行比较,只要2个之中有一个这个位是1,则2者进行或运算之后得到的那个二进制数相应的位也是1。 因此,可以将
阅读全文
浙公网安备 33010602011771号