int pre[1010]; int (int root) { int son,tmp; son = root; while(pre[root]!=root) { root=pre[root]; } while(son!=root) { tmp=pre[son]; pre[son]=root; son =tmp; } return root; } int join(int a,int b) { int x=union(a); int y=union(b); if(x!=y) pre[x]=y; }
void dijkstra(int x) { fill(vis,vis+1025,0); fill(dis,dis+1025,0); vis[x]=1; for(int i=1;i<=n;i++) { dis[i]=maze[x][i]; } for(int i=1;i<=n;i++) { int minn= inf; int idx=0; for(int j=1;j<=n;j++) { if(vis[i]==0&&dis[j]<minn) { minn=dis[j]; idx=j; } } vis[idx]=1; for(int j=1;j<=n;j++) { if(!vis[j]&&dis[idx]+maze[idx][j]<dis[j]) dis[j]=dis[idx]+maze[idx][j]; } } }
struct Node{
int val; Node *left,*right; Node(int x):val(x),left(nullptr),right(nullptr) {};
}; Node *root = nullptr; Node *iinsert(Node *root,int val) { if(root==nullptr) root=new Node(val); else if(root->val < val) root->right = iinsert(root->right,val); else root->left = iinsert(root->left, val); }
void build(int prel,int prer,int postl,int postr) { if(prel>=prer) { return ; } int val= preOrder[pre+1]; int fa = prel; int postidx; for(int i=postl;i<=postr;i++) if(postOrder[i]==val) postidx= i; int num = postidx-postl; if(num==prer-prel-1) isUnique = false; node[fa].left = pre+1; build(prel+1,prel+num+1,postl,postidx); if(prer-prel-1>num) { node[fa].right = prel+num+2; build(prel+num+2,prer,postidx+1,postr-1); } }
Node *build(int pl,int pr,int il,int ir) { if(pl>pr) return NULL; Node *root = new Node(A[pl]); int idx; for(int i=il;i<=ir;i++) { if(A[pl]==B[i]) { idx=i; break; } } root->left = build(pl+1,idx-il+pl,il,idx-1); root->right = build(idx-il+pl+1,pr,idx+1,ir); return root; }
Node *build(int il,int ir,int postl,int postr) { if(il>ir) return NULL; Node *root = new Node(B[postl]); int idx; for(int i=il;i<=ir;i++) if(A[i]==B[postl]) idx= i,break; int t = idx-il; root->left = build(il,idx,postl+1,postl+t); root->right = build(idx+1,ir,postl+t+1,posr); return root; }
|
近期评论