ACM算法集锦.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ACM算法集锦.doc

kurXX最小生成树 #include iostream #include math.h #include algorithm using namespace std; #define M 501 #define LIMstruct edg{ int u,v; int w; }all_e[M*M/2]; bool operator (const edg a,const edg b){ return a.wb.w; } int set[M]; inline bool uni(int set[],int a,int b){ int ac=0,a2=a,b2=b,bc=0; while(set[a]!=0) {a=set[a];ac++;} if(a2!=a) set[a2]=a; while(set[b]!=0) {b=set[b];bc++;} if(b2!=b) set[b2]=b; if(a==b) return false; if(acbc) set[a]=b; else set[b]=a; return true; } int main(){ int i,j,k,n,m,u,v,t; cin t; for(k=0;kt;k++){ memset(set,0,sizeof(set)); cin n; int ei=0; for(i=1;i=n;i++){ for(j=1;j=n;j++){ if(t!=0){ edg e; e.u=i;e.v=j; scanf(%d,e.w); if(ij) all_e[ei++]=e; } } } sort(all_e[0],all_e[ei]); int count=0; int size=ei; int max=0; for(i=0;isize count n-1;i++){ if(uni(set,all_e[i].u,all_e[i].v)){ count++; if(all_e[i].wall_e[max].w) max=i; } } printf(%d\n,all_e[max].w); } return 0; } Prim #include iostream using namespace std; #define M 2001 int set[M]={0},g[M][M]; char str[M][8]; inline void make_map(int n,int g[M][M]){ int i,j,k; for(i=1;i=n;i++){ for(j=i+1;j=n;j++){ int c=0; for(k=0;k7;k++) if(str[i][k]!=str[j][k]) c++; g[i][j]=g[j][i]=c; } } } int main(){ int n,q[M],qf=0,ql=0,d[M],u; char c; scanf(%d%c,n,c); int i; while(n!=0){ memset(set,0,sizeof(set)); memset(g,0,sizeof(g)); for(i=1;i=n;i++) { scanf(%s,str[i]); q[i-1]=i; d[i]=2000000; } qf=0;ql=n-1; make_map(n,g); int sum=0; int f=false; while(qf=ql){ int min=qf; for(i=qf+1;i=ql;i++){ if(d[q[i]] d[q[min]]) min=i; } swap(q[qf],q[min]); u=q[qf]; qf++; if(f) sum+=d[u]; for(i=1;i=n;i++){ if(g[u][i] !=0 g[u][i] d[i]) d[i]=g[u][i]; } f=true; } printf(The highest possible quality is 1/%d.\n,sum); scanf(%d%c,n,c); } return 0; } 堆实现最短路 #include iostream #include string #include stdlib.h #include vector; using namespace std; #define M 1001

文档评论(0)

wangshirufeng + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档