当前位置: 首页 > wzjs >正文

织梦手机网站四川住房建设厅网站首页

织梦手机网站,四川住房建设厅网站首页,网站评论管理怎么做的,宁津建设局网站前言 有向无环图和拓扑排序直接关联到中后期的图论建模思想,是很重要的基础知识。这个如果不彻底弄懂,以后图论会很困难。 有向无环图 正如其名,一个边有向,没有环的图,也叫DAG。 DAG图实际运用:描述含…

前言

有向无环图和拓扑排序直接关联到中后期的图论建模思想,是很重要的基础知识。这个如果不彻底弄懂,以后图论会很困难。

有向无环图

正如其名,一个边有向没有环的图,也叫DAG。

DAG图实际运用:描述含有公共子式的表达式及工程系统的进行过程时的有效工具。

一个较大的工程被分成若干个子工程,这些子工程被称作活动。活动之间存在某种约束关系,用有向边来表示。

关心的问题:

1 1 1 :工程能否顺利进行

2 2 2 :估算整个工程完成所需要的最短时间

拓扑排序

用于在一个DAG表示的工程的的前后驱约束关系中,对完成活动的先后进行排序,使工程顺利进行。

拓扑排序的步骤:

1 1 1 :选择图中所有入度为 0 0 0 的点,加入栈/队列。

2 2 2 :取出栈顶/队首的点加入拓扑序列末尾,删除这个点以及其出边(出边所到点的入度减 1 1 1 ),弹栈/队列。

3 3 3 :在出边到达的点中选择入度为 0 0 0 的点,加入栈/队列。

4 4 4 :重复 2 ∼ 3 2\sim3 23 ,直到栈/队列空。

如果拓扑排序结束后拓扑序列有 n n n n n n 为图的顶点数)个元素,那么图中无环;否则,图中必定存在环。

时间复杂度: O ( n + m ) O(n+m) O(n+m)

void topo_sort()
{int sta[300000],top=0;for(int i=1;i<=n;i++)if(ind[i]==0)sta[++top]=i;while(top){int now=sta[top];top--;for(int i=h[now];i;i=e[i].next){ind[e[i].v]--;if(ind[e[i].v]==0)sta[++top]=e[i].v;}ou[++ans]=now;}
}

拓扑排序例题

例题 1 1 1

B3644 家谱树

拓扑排序板子题,不多赘述。

#include <bits/stdc++.h>
using namespace std;
struct edge
{int v,next;
}e[300000];
int n,m,h[300000],cnt=0,ans=0,ind[300000],ou[300000];
void add_edge(int u,int v)
{e[++cnt].v=v;e[cnt].next=h[u];h[u]=cnt;ind[v]++;
}void topo_sort()
{int sta[300000],top=0;for(int i=1;i<=n;i++)if(ind[i]==0)sta[++top]=i;while(top){int now=sta[top];top--;for(int i=h[now];i;i=e[i].next){ind[e[i].v]--;if(ind[e[i].v]==0)sta[++top]=e[i].v;}ou[++ans]=now;}
}int main()
{scanf("%d",&n);for(int i=1;i<=n;i++){int t=-1;while(t!=0){scanf("%d",&t);if(t==0)break;add_edge(i,t);}}topo_sort();if(ans!=n)printf("-1");else for(int i=1;i<=ans;i++)printf("%d ",ou[i]);return 0;
}

例题 2 2 2

U141986 奖金

前置知识:【6*】差分约束系统学习笔记

以每个人的奖金数为点构造差分约束系统,由于题目要求至少,需要求最长路,由于边权只有 1 1 1 ,可以通过拓扑排序直接求解最长路。

#include <bits/stdc++.h>
using namespace std;
struct edge
{int v,next;
}e[300000];
int n,m,h[300000],cnt=0,ans=0,ind[300000],ou[300000],dis[300000],sum=0;
void add_edge(int u,int v)
{e[++cnt].v=v;e[cnt].next=h[u];h[u]=cnt;ind[v]++;
}void topo_sort()
{int sta[300000],top=0;for(int i=0;i<=n;i++)if(ind[i]==0)sta[++top]=i;while(top){int now=sta[top];top--;for(int i=h[now];i;i=e[i].next){ind[e[i].v]--;dis[e[i].v]=max(dis[e[i].v],dis[now]+1);if(ind[e[i].v]==0)sta[++top]=e[i].v;}ou[++ans]=now;}
}int main()
{scanf("%d%d",&n,&m);for(int i=1;i<=m;i++){int x,y;scanf("%d%d",&x,&y);add_edge(y,x);}for(int i=1;i<=n;i++)dis[i]=-1;dis[0]=99;for(int i=1;i<=n;i++)add_edge(0,i);topo_sort();if(ans!=n+1)printf("Poor Xed");else{for(int i=1;i<=ans;i++)sum+=dis[i];printf("%d",sum);}return 0;
}

例题 3 3 3

P1983 [NOIP2013 普及组] 车站分级

图论建模题目,第一眼看上去像DP。

由于在一段内,车所经过的车站必然比没有经过的车站优先级高,利用这一点可以以每个车站的优先级为点构造差分约束系统,由于题目要求最少,需要求最长路,同时边权依旧只有 1 1 1 ,可以直接使用拓扑排序。

至于建边,可以把有效行程之内未经过的车站到每一个经过了的车站建一条边,表示一个大于关系。同时这样可能会有很多重边,可以通过记忆化,排除冗余。

当然,此题有复杂度更优秀的做法,可以参考其他题解。

#include <bits/stdc++.h>
using namespace std;
struct node
{int v,next,dis;
}e[1000010];
int n,m,s,h[1010],cnt=0,z[1010],book[1010],dis[1010],ind[1010],vis[1010][1010],ans=0;
void add_edge(int f,int v,int dis)
{e[++cnt].next=h[f];e[cnt].v=v;e[cnt].dis=dis;h[f]=cnt;ind[v]++;
}void topo_sort()
{int sta[300000],top=0;for(int i=0;i<=n;i++)if(ind[i]==0)sta[++top]=i;while(top){int now=sta[top];top--;for(int i=h[now];i;i=e[i].next){ind[e[i].v]--;dis[e[i].v]=max(dis[e[i].v],dis[now]+e[i].dis);if(ind[e[i].v]==0)sta[++top]=e[i].v;}}
}int main()
{scanf("%d%d",&n,&m);for(int i=0;i<m;i++){scanf("%d",&s);for(int j=0;j<s;j++)scanf("%d",&z[j]);for(int j=0;j<s;j++)book[z[j]]=1;for(int k=0;k<s;k++)for(int j=z[0];j<=z[s-1];j++)if(!book[j]&&!vis[j][z[k]]){add_edge(j,z[k],1);vis[j][z[k]]=1;}memset(book,0,sizeof(book));}for(int i=1;i<=n;i++)add_edge(0,i,0);for(int i=1;i<=n;i++)dis[i]=-99999999;dis[0]=0;topo_sort();for(int i=1;i<=n;i++)ans=max(ans,dis[i]);printf("%d",ans+1);return 0;
}

后记

一篇教练推荐的博客,写在这里,提供参考:

拓扑排序(Topological Sorting)


文章转载自:

http://TIiU7vA3.mwjwy.cn
http://L7duF6kW.mwjwy.cn
http://dW8JIXGT.mwjwy.cn
http://xQOQrsV4.mwjwy.cn
http://BIjyKrWI.mwjwy.cn
http://JvBhwCeI.mwjwy.cn
http://eRW6rSaY.mwjwy.cn
http://PMe1uKI4.mwjwy.cn
http://h8dL8fXz.mwjwy.cn
http://oUkIh67I.mwjwy.cn
http://3AZEOy4L.mwjwy.cn
http://uXqCgWEl.mwjwy.cn
http://UvB4l3G0.mwjwy.cn
http://rWSEHfQg.mwjwy.cn
http://6DHyCgI0.mwjwy.cn
http://vzICCUEy.mwjwy.cn
http://nlQoXvHL.mwjwy.cn
http://5gHA5tim.mwjwy.cn
http://yQdjkPJA.mwjwy.cn
http://J41UFAa3.mwjwy.cn
http://cudmqwdq.mwjwy.cn
http://X7Xneo7x.mwjwy.cn
http://S6HwTSpX.mwjwy.cn
http://hdpfMBXy.mwjwy.cn
http://jJp9zT2F.mwjwy.cn
http://lbZFZC5R.mwjwy.cn
http://EpYjw8PO.mwjwy.cn
http://kYexHA2g.mwjwy.cn
http://2SPCkflm.mwjwy.cn
http://MLDHEUxD.mwjwy.cn
http://www.dtcms.com/wzjs/733927.html

相关文章:

  • 世界杯消息哪个门户网站做的好我的免费网
  • 天眼查网站营销型网站建设 ppt
  • 国外做微课的网站网站设计师加油站
  • 保定外贸网站建设wordpress 文章折叠
  • 余姚的网站建设厦门网站推广
  • 深圳一元网站建设公司wordpress中visitor
  • 湖北建站中心县文化馆网站建设方案
  • 个人网站设计主题wordpress微官网
  • 泉州模板自助建站企业定制网站建设公司哪家好
  • 南宁网站设计公司排名杭州建设网 郎鑫
  • 公司做营销网站wordpress手机端兼容
  • 成都维尼网络 网站建设seo企业推广案例
  • 万网空间存放两个网站张家港质监站网址
  • 山西百度公司做网站的西安做网站的公司在哪
  • 电视剧在线观看免费影视网站手机前端开发软件工具
  • 合肥网站建站推广网站开发职责
  • 做网站文案wordpress 主页 导航
  • 手机网站建设怎么设计您与此网站建立的连接不安全
  • 网站模板制作步骤北京网页设计公司
  • 域名商的网站海誉网站定制
  • 网站项目需求表镇江网站制作费用
  • 陕西天和建设有限公司网站网站建设图片流程图
  • 微信平台app网站建设网站建设公司方唯
  • 在线工具网站陕西省住房和城乡建设厅官方网站
  • 做百度网站排名软件建设网站要在需求
  • 企业级网站开发平台wordpress去重插件
  • 台州网站搭建seo值怎么提高
  • 网站的黏度中国建设银行北京招聘信息网站
  • 直播网站建设方案企业网设计方案论文
  • 和平东路网站建设网站建设方式优化