图论
cnyali_szsh348
这个作者很懒,什么都没留下…
展开
-
费用流
最小费用路算法【最小费用最大流】:在实际应用中不仅需要考虑流量,还要考虑费用。我们希望建立一个费用最小,流量最大的网络,即最小费用最大流两种思路:(1):最小费用路算法(2):消圈算法做法:(1):创建混合网络(2):找最小费用路(3):沿着增广路径正向增流d,反向减流d...原创 2020-02-26 19:28:24 · 138 阅读 · 0 评论 -
网络流
最短增广路算法:网络是一个带权有向图,包含一个源点和一个汇点,没有反平行边。网络传输都有方向和容量。例题:从s城到t城,中途经过若干个城市,每两个城市之间有它的容量,求从s到t每天最多能运多少货物?网络流:网络流即网络上的流,是定义在网络边集E上的一个函数可行流:满足下列条件:1.容量约束每个管道的实际流量flow不能超过该管道的cap2.能量守恒流入=流出【除源点汇点】源点s:...原创 2020-02-26 09:36:31 · 136 阅读 · 0 评论 -
树形DP入门2019-08-12
【题意】公司有n个人,每个人有价值vi,有一天举办年会,每个人都可以参加,但有严格的等级制度,参加活动时,不能同时出现a和a的上司,问如何才能使总和最大。【分析】每个人只有去和不去两种状态,设f[i][0]和f[i][1]分别表示第i个人不参加和参加年会,获得的总的最大价值。则状态转移方程为:f[i][1] += f[j][0],f[i][0] += max{f[j][0],f[j][...原创 2019-08-12 15:32:26 · 109 阅读 · 0 评论 -
2019-05-21 图进阶
割顶的定义:对于无向图G,如果删除某个点u之后,联通分量数量增加,则称u为图的割顶。DFS时标记每个点遍历的次序为dfn规定low(u)为u及其后代所能连回的最早祖先的dfn值如:该图中,A B C D Edfn 1 2 3 4 5low 1 2 3 3 3因为e有一条边可连回c(图上未标),所以c,d,e三点的low值都为c的dfn值——3求割顶代码:...原创 2019-05-21 20:15:31 · 87 阅读 · 0 评论 -
2019-03-10 离散化
USACO 3.1.4cpp:#include <bits/stdc++.h>using namespace std;const int maxn=2001;struct lrj233{ int x1,x2,y1,y2,c;}sp[maxn];int p[maxn][maxn],ys[maxn],a,b,n,cntx,cnty,tx[maxn],ty[maxn],ta[...原创 2019-03-10 20:57:02 · 117 阅读 · 0 评论 -
2019-02-24 二维凸包
二维凸包:#include &amp;lt;bits/stdc++.h&amp;gt;using namespace std;const int maxn=100000+10;int n,top=2;double ans;struct node{//存储直角坐标系的x和y值 double x,y;};node p[maxn],z[maxn];bool cmp(node u,node v){//...原创 2019-02-24 20:30:55 · 146 阅读 · 0 评论 -
2019-02-13 最短路应用
传递闭包:传递闭包就是求有向图中两点的可达性。若从x可以到y,则ok[x][y]=1,否则ok[i][j]=0,然后利用近似Floyd的方法求解核心代码:for(int k=1;k&amp;amp;lt;=n;k++) for(int i=1;i&amp;amp;lt;=n;i++) for(int j=1;j&amp;amp;lt;=n;j++) ok[i][j]|=(ok[i][k]&amp;amp;amp;ok[k][原创 2019-02-13 14:52:57 · 269 阅读 · 0 评论 -
2019-2-12 最短路径算法
Dijkstra+Heap优化:可AC这道题还有这道题//时间复杂度:O(n*log2n)#include &amp;lt;bits/stdc++.h&amp;gt;using namespace std;const int maxn=1000000+10,inf=2147483647;int w[maxn],to[maxn],beg[maxn],nex[maxn],d[maxn],p[maxn];...原创 2019-02-12 15:03:43 · 216 阅读 · 0 评论 -
Tarijan
牛的舞会#include &amp;amp;amp;lt;bits/stdc++.h&amp;amp;amp;gt;using namespace std;const int N=10001,M=100010; int n,m,ans,head[N],pos,a,b;stack&amp;amp;amp;lt;int&amp;amp;amp;gt;S;struct edge{//结构体,存储编号与下一个 int to,next;原创 2019-02-15 14:59:26 · 136 阅读 · 0 评论 -
2018-12-30 树状数组
这一题代码:#include&lt;bits/stdc++.h&gt;using namespace std;const int maxn=500000+5;int c[maxn],n,m;int szsh(int x){ return x &amp; -x;}void add(int i,int x){ while(i&lt;=n){ c[i]+=...原创 2018-12-30 20:19:15 · 110 阅读 · 0 评论 -
2018-12-23 树
数组模拟堆进行快速排序:#include &lt;bits/stdc++.h&gt;using namespace std;const int maxn=100000+10;int a[maxn],len,n,k;int main(){ scanf("%d",&amp;n); for(int i=1;i&lt;=n;i++){ scanf("%d",&am原创 2018-12-23 20:01:12 · 111 阅读 · 0 评论 -
spfa
#include &lt;bits/stdc++.h&gt;using namespace std;const int maxn=10000+10,inf=2147483647;int n,m,s,tot,dis[maxn],head[maxn];bool vis[maxn];struct Edge{ int next,to,w;}h[maxn];void add(int u,in...原创 2018-12-10 22:31:32 · 88 阅读 · 0 评论 -
2018-12-16 栈
栈:老师blog十进制转二进制:1.数组模拟栈:#include &amp;amp;lt;bits/stdc++.h&amp;amp;gt;using namespace std;const int maxn=1000+10;int s[maxn],n,len;int main(){ scanf(&amp;quot;%d&amp;quot;,&amp;amp;amp;n); while(n){ s[++l原创 2018-12-16 19:34:48 · 88 阅读 · 0 评论 -
【题解】HDU 1285——确定比赛名次
确定比赛名次题目描述:有N个比赛队(1&amp;lt;=N&amp;lt;=500),编号依次为1,2,3,。。。。,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名,但现在裁判委员会不能直接获得每个队的比赛成绩,只知道每场比赛的结果,即P1赢P2,用P1,P2表示,排名时P1在P2之前。现在请你编程序确定排名。 Input 输入有若干组,每组中的第一行为二个数N(1&amp;lt;...原创 2018-10-02 21:04:20 · 280 阅读 · 0 评论 -
2018-10-02拓扑排序
拓扑排序:大学-高中阶段自由选课在图论中,拓扑排序(Topological Sorting)是一个有向无环图(DAG, Directed Acyclic Graph)的所有顶点的线性序列。且该序列必须满足下面两个条件:1.每个顶点出现且只出现一次。2.若存在一条从顶点 A 到顶点 B ,则A为B的前序 。Tips:有向无环图才有拓扑排序。入度:有几条边与它相连一.邻接矩阵来做#in...原创 2018-10-02 19:58:25 · 152 阅读 · 0 评论