图论
untilyouydc
月份未到你也得接受
展开
-
Conscription POJ - 3723
题目本身不难,但好像题意有点难懂。给了N个男生,M个女生。要招募这(N+M)个人,需要花费1000*(N+M)。但现在男生和女生直接可以有一种联系,这种联系的数值为di,如果你想招募x,并且y与x 相连同时y已经被招募(其实即使y没有被招募,你也可以选择先花10000招募y,然后y就变成被招募状态了),那么你可以减少di元。因此,我们可以将招募的人统一用并查集合并,如果某条边的两个点x,y,不在同一集合时,代表这条边的值可以被减少。所以,最佳的做法就是每次选择权重最大的边,即用最小生成树的算法来原创 2020-08-28 23:00:20 · 233 阅读 · 0 评论 -
ACM图论部分__无向图的割点,桥的求解
1. 无向图的割点求法:利用Tarjan算法思想,若一个点为割点,那么只存在两种情况:(1)该点是根节点,且有两个以上子节点(2)该点不上根节点,但是该点的低位数大于等于DFS数低位数的定义:从该顶点v出发,只用最多一条回头边,沿有向边能走到的顶点中DFS数最小值。DFS数:DFS遍历中的遍历顺序。低位数L(v)的两种情况:(1)没用上回头边,则能走到的DFS数最小的的顶点就是该点自身,对应的路是...原创 2018-02-18 09:32:47 · 1077 阅读 · 0 评论 -
计算几何基础知识——判断线段与线段相交
如何判断线段与线段是否相交。方法:1. 矩形实验 2. 跨立实验知识点解析:1. 矩形实验是为了将相距距离比较远的线段直接排除(因为这样,他们不能相交),具体做法也很简单,就是两条线段横坐标与纵坐标的区间不会有交集2. 跨立实验是为了判断,两线段坐标区间有交集的线段之间的关系。具体思路为:一条线段的两个点在另一条线段的两侧,则满足跨立实验,具体代码实现为,利用...原创 2018-02-04 22:46:00 · 2796 阅读 · 0 评论 -
ACM图论__有向图的强连通分支算法
求有向图的强连通分支,主要有两种算法tarjan算法和kosaraju算法,这里介绍tarjan算法先来看几个定义:(1)连通:两个点可以相互到达(2)强连通(strongly connected): 在一个有向图G里,设两个点 a b 发现,由a有一条路可以走到b,由b又有一条路可以走到a,我们就叫这两个顶点(a,b)强连通。(3)强连通分量strongly connected componen...原创 2018-02-21 19:25:41 · 3322 阅读 · 0 评论 -
ACM__图论__最小生成树算法
求解最小生成树的算法主要有两种,prim算法和kruskal算法,下面分别介绍这两种算法:1. prim算法:算法思想:一共有n个点,每次循环选择一个点加入(这个点肯定是最小代价的点的连线),为了可以更好的在每次循环的时候都能得到最小的代价,所以我引入一个最小代价数组,每次循环,都对这个数组进行维护,这样就可以求出最小生成树了。下面给出代码及其具体注释:#include <iostream&...原创 2018-03-01 23:18:02 · 239 阅读 · 0 评论 -
Fibonacci Tree HDU - 4786 (巧妙的运用最小生成树)
题目大意:给你图的N个点和M条双向边。告诉你每条边的权值。权值为1表示该边是白边,权值为0表示该边为黑边。问:能否找到一棵生成树,使生成树白边的个数恰好为fibonacci数。如果能构成这样的fibonacci树,输出Yes,否则输出No。思路:给你权值要么是0,要么是1,然后让你求白色边的数量关系。白色边的数量不就等价于边上的权值之和......考虑最少的白边数量,自然是最小...原创 2018-10-08 10:37:46 · 279 阅读 · 0 评论 -
一个人的旅行 HDU - 2066 (最短路裸题)
题目链接思路:将草儿的家设为点0,然后建图跑dj就行。反思:dj还不能随心所欲的手打??代码:#include <bits/stdc++.h>using namespace std;int mp[1005][1005];const int inf=1<<30;int dist[10005];bool vis[10005]; int T,S,D,...原创 2019-02-15 17:44:15 · 408 阅读 · 1 评论