网站大量收购闲置独家精品文档,联系QQ:2885784924

ACM程序集_wangLuoYan.doc

  1. 1、本文档共53页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ACM程序集_wangLuoYan

目录 一、最短路 1 二、凸包 5 三、增广路网络流 7 四、最高标号预流推进法 11 五、最小费用最大流 15 六、博弈 19 七、字符串 20 八、高精度 35 一、最短路 #include iostream using namespace std; typedef long long WeightType; //Notice here, to make sure that its wast exceed const WeightType InfiniteWeight=(WeightType)2147483647*2147483647; struct Edge{ int v; WeightType w; Edge *next; }; class Graph{ int n; int heapSize; int *heap,*sort; WeightType *w; Edge **G; public: Graph(){n=0;} ~Graph(){ClearGraph();} void ClearGraph(); void SetGraphSize(int size); int GetGraphSize(){return n;} void InsertEdge(int u,int v,WeightType w); void HeapAssign(int i,int v){heap[i]=v; sort[v]=i;} void HeapSift(int i,int m); void HeapUpdate(int i); void HeapDelete(int i) { sort[heap[i]]=-1; --heapSize; if (heapSize==0) return; HeapAssign(i,heap[heapSize+1]); HeapUpdate(i); } //-1 means vertex heap[i] has been extended. void HeapInsert(int v) { ++heapSize; HeapAssign(heapSize,v); HeapUpdate(heapSize);} WeightType* HeapOptimizedDijkstra(int s); void Print(); }; void Graph::InsertEdge(int u,int v,WeightType w){ static Edge *p; p=new Edge; p-v=v; p-w=w; p-next=G[u]; G[u]=p; } void Graph::SetGraphSize(int size){ ClearGraph(); n=size; G=new Edge*[size]; memset(G,NULL,sizeof(Edge*)*size); heap=new int[size+1]; //this is very important. sort=new int[size]; } void Graph::ClearGraph(){ if (n==0) return; static int i; static Edge *p; for (i=0; in; i++) { while (G[i]) { p=G[i]; G[i]=G[i]-next; delete p; } } delete []G; delete []heap; delete []sort; n=0; } void Graph::Print(){ static Edge *p; static int i; i=0; for (i=0; in; i++) { p=G[i]; while (p) { couti p-v weight=p-wendl; p=p-next; } if (G[i]) coutendl; } } void Graph::HeapSift(int i,int m){ static int v,j; v=heap[i]; j=i1; while (j=m) { if (jmw[heap[j+1]]w[heap[j]]) ++j; if (w[heap[j]]w[v]) { HeapAssign(i,heap[j]); i=j; j=1; } else break; } HeapAssign(i,v); } void Graph::HeapUpdate(int i){ static int v; v=he

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档