2012年9月18日
摘要: 大意:Dandelion's uncle的工厂开始分红,厂里的工人们有些有特殊的要求,如A工人的工资一定要大于B,B工人的工资一定要大于C,而不能出现A > B,B> C,C > A的情况。思路:拓扑排序。(基于邻接表BFS拓扑排序,邻接矩阵会MLE)。CODE:#include<iostream>#include<cstdio>#include<cstdlib>#include<queue>usingnamespacestd;constintM=10005;intu[4*M],v[4*M],next[4*M],w[4* 阅读全文
posted @ 2012-09-18 21:25 有间博客 阅读(261) 评论(0) 推荐(0) 编辑
摘要: 大意:拓扑排序或者Floyd判断是否有环。基于邻接表的BFS实现的拓扑排序。CODE1:#include<iostream>#include<queue>usingnamespacestd;#defineM10005structedge{intv,w,next;}edge[20005];intind[M],first[M],cnt,n,m,tot,num;inttopo[M];voidinit(){cnt=0;tot=0;memset(first,-1,sizeof(first));memset(ind,0,sizeof(ind));memset(topo,0,size 阅读全文
posted @ 2012-09-18 20:31 有间博客 阅读(323) 评论(0) 推荐(0) 编辑
摘要: 最近做图的题比较多,除了克鲁斯卡尔和floyd,像广搜,普里姆,Bellman-Ford,迪杰斯特拉,SPFA,拓扑排序等等,都用到图的邻接表形式。数据结构书上表示邻接表比较复杂,一般形式如下:typedefstructNode{intdest;//邻接边的弧头结点序号intweight;//权值信息structNode*next;//指向下一条邻接边}Edge;//单链表结点的结构体typedefstruct{DataTypedata;//结点的一些数据,比如名字intsorce;//邻接边的弧尾结点序号Edge*adj;//邻接边头指针}AdjHeight;//数组的数据元素类型的结构体t 阅读全文
posted @ 2012-09-18 16:50 有间博客 阅读(10066) 评论(1) 推荐(1) 编辑
摘要: STL map + 拓扑排序。#include<iostream>#include<cstdio>#include<cstdlib>#include<map>usingnamespacestd;constintSIZE=5000;intind[SIZE];intcnt;map<string,int>Map;voidinit(){Map.clear();memset(ind,0,sizeof(ind));cnt=0;}intmain(){intn;charsz1[31],sz2[31];while(~scanf("%d&quo 阅读全文
posted @ 2012-09-18 14:41 有间博客 阅读(128) 评论(0) 推荐(0) 编辑
摘要: 大意:判断是否有向图是否有环。思路1:通过Floyd传递闭包来确定是否有向环。(350MS)思路2:通过拓扑排序判断是否存在有向环。(109MS)CODE1:#include<iostream>#include<cstdio>#include<cstdlib>usingnamespacestd;constintSIZE=510;intG[SIZE][SIZE];intn,m;intFLoyd(){for(intk=0;k<n;k++)for(inti=0;i<n;i++)for(intj=0;j<n;j++)G[i][j]=G[i][j]| 阅读全文
posted @ 2012-09-18 11:18 有间博客 阅读(172) 评论(0) 推荐(0) 编辑