问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

哈密顿回路的C++代码

发布网友 发布时间:2022-12-23 21:48

我来回答

1个回答

热心网友 时间:2023-10-05 03:16

#include <queue>#include <cstdio>#include <set>#include <string>#include <stack>#include <cmath>#include <climits>#include <map>#include <cstdlib>#include <iostream>#include <vector>#include <algorithm>#include <cstring>#define max(a,b) (a>b?a:b)using namespace std;typedef long long(LL);typedef unsigned long long(ULL);const double eps(1e-8);char B[1<<15],*S=B,*T=B,ch;#define getc() (S==T&&(T=(S=B)+fread(B,1,1<<15,stdin),S==T)?0:*S++)int aa,bb; int F(){      while(ch=getc(),(ch<'0'||ch>'9')&&ch!='-'); ch=='-'?aa=bb=0:(aa=ch-'0',bb=1);      while(ch=getc(),ch>='0'&&ch<='9')aa=aa*10+ch-'0'; return bb?aa:-aa;}#define N 100010int n,swp,cnt,z[N]; long long ans;#define swap(a,b) (swp=a,a=b,b=swp)#define abs(x) (x>0?x:-(x))#define max(a,b) (a>b?a:b)#define cmax(x) (ans<x?ans=x:1)struct P {int x,y,id,nx,ny;} p[N];bool operator<(const P&a,const P&b) {return a.nx<b.nx||a.nx==b.nx&&a.ny<b.ny;}class Graph{private:      int et,la[N],ufs[N],tot;      struct D      {            int x,y,v;            bool operator<(const D&a)const {return v<a.v;}      } d[N<<2];      struct E {int to,v,nxt;} e[N<<1];      int gf(int x) {return ufs[x]==x?x:ufs[x]=gf(ufs[x]);}      void adde(int x,int y,int v)      {            e[++et]=(E) {y,v,la[x]},la[x]=et;            e[++et]=(E) {x,v,la[y]},la[y]=et;      }public:      Graph() {et=1;}      void add(int x,int y,int v) {d[++tot]=(D) {x,y,v};}      void make()      {            std::sort(d+1,d+1+tot);            for(int i=1; i<=n; i++)ufs[i]=i; cnt=n;            for(int i=1,x,y; i<=tot; i++)                  if((x=gf(d[i].x))!=(y=gf(d[i].y)))                  {                        ufs[x]=y,cnt--,ans+=d[i].v,                                            adde(d[i].x,d[i].y,d[i].v);                  }      }} G;struct D {int x,n;} d[N];bool operator<(const D&a,const D&b) {return a.x<b.x;}#define dis(i,j) (abs(p[i].x-p[j].x)+abs(p[i].y-p[j].y))void ins(int i){      for(int t=p[i].ny; t<=cnt; t+=t&-t)            if(z[t]==0||p[z[t]].x+p[z[t]].y<p[i].x+p[i].y)z[t]=i;}int query(int i){      int f=0;      for(int t=p[i].ny; t>0; t-=t&-t)            if(z[t]&&(f==0||p[z[t]].x+p[z[t]].y>p[f].x+p[f].y))f=z[t];      return f;}void work(){      for(int i=1; i<=n; i++)p[i].nx=p[i].x-p[i].y,p[i].ny=p[i].y;      std::sort(p+1,p+1+n);      for(int i=1; i<=n; i++)d[i]=(D) {p[i].ny,i};      std::sort(d+1,d+1+n); d[n+1].x=d[n].x; cnt=1;      for(int i=1; i<=n; i++)      {            p[d[i].n].ny=cnt;            if(d[i].x!=d[i+1].x)cnt++;      }      memset(z,0,sizeof(z));      for(int i=1,j; i<=n; ins(i++))            if(j=query(i))G.add(p[i].id,p[j].id,dis(i,j));}int main(){      n=F();      for(int i=1; i<=n; i++)p[i]=(P) {F(),F(),i}; work();      for(int i=1; i<=n; i++)swap(p[i].x,p[i].y); work();      for(int i=1; i<=n; i++)p[i].y=-p[i].y; work();      for(int i=1; i<=n; i++)swap(p[i].x,p[i].y); work(); G.make();      printf(%lld\n,ans);}/** this code is made by crazyacking* Verdict: Accepted* Submission Date: 2015-09-11-15.31* Time: 0MS* Memory: 137KB*/

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
Linux系统安装FTP服务器 Linux系统的网络文件共享 建筑的七盏明灯的内容简介 面向对象设计七大原则 简单说 交互设计七大定律 交互设计的“根”——七大定律 交互设计原则和理论2——七大定律 七大设计原则 附近的加油站有哪些 附近的加油站有哪些地方 QQ里这表情是啥意思 求《贞观之治》电视剧的迅雷下载 求一篇改编文:纠缠不清 by柠檬火焰(范源庚) yeezy是不是要过时 zbn电缆与nh电缆区别? 二八调鱼竿什么意思 怎么修炼魔法 写字楼卫生间方位风水 机械师笔记本和华硕笔记本那个强? 我想问问机械师笔记本是杂牌吗 小气泡有什么作用呢 什么是小气泡呢 微信小程序考试宝可以共同导题吗 微信小程序考试宝题目准确吗 什么是发展的实质?在生活中对我们有什么意义? 华为nova9pro与vivox90pro哪个好 出纳审批意见怎么写 - 信息提示 beamng怎么固定 BeamNG正版更新到8.0后,车子怎么开,打开地图,车子刷出来转向可以用,但是踩油门没反应。 beamng drive怎么启动汽车 求输入十个数字,去掉重复数字的编程 百度云怎么保存照片? 计算机题,请知道的告诉我,谢谢,。 在Excel中,关于工作表区域的论述正确的是___。 佰澳朗德dha怎么看生产日期 b站sc在哪里看 b站发sc可以增加航海经验度吗 北京劳动仲裁电话是多少 如何在手机上同时登录两个 詹姆斯挑战恩比德失败,湖人旧将反击,沃格尔马上叫暂停 59%与59/100读法? 591000000万读作? 房地产行业分析 坚韧,无私,悲壮的意思是什么? 交换机出口流量怎么算 海信电视进入OTT模式是什么状态? 《情深深雨濛濛》剧组重聚,三姐妹独缺梦萍,最可惜的还是方瑜 童年阴影,盘点国产剧大反派,最后一个是惊喜 乔安智能怎样能看到邦定的号, 乔安智能省电模式怎么关闭