存个代码,233

http://acm.hdu.edu.cn/showproblem.php?pid=2475

  1 #include<bits/stdc++.h>
  2 using namespace std;
  3 #define MAXN 50010
  4 struct node
  5 {
  6     int left,right;
  7 }tree[MAXN];
  8 int father[MAXN],rev[MAXN],Stack[MAXN],cc[MAXN];
  9 int read()
 10 {
 11     int s=0,fh=1;char ch=getchar();
 12     while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)fh=-1;ch=getchar();}
 13     while(ch>=‘0‘&&ch<=‘9‘){s=s*10+(ch-‘0‘);ch=getchar();}
 14     return s*fh;
 15 }
 16 int isroot(int x)
 17 {
 18     return tree[father[x]].left!=x&&tree[father[x]].right!=x;
 19 }
 20 void pushdown(int x)
 21 {
 22     int l=tree[x].left,r=tree[x].right;
 23     if(rev[x]!=0)
 24     {
 25         rev[x]^=1;rev[l]^=1;rev[r]^=1;
 26         swap(tree[x].left,tree[x].right);
 27     }
 28 }
 29 void rotate(int x)
 30 {
 31     int y=father[x],z=father[y];
 32     if(!isroot(y))
 33     {
 34         if(tree[z].left==y)tree[z].left=x;
 35         else tree[z].right=x;
 36     }
 37     if(tree[y].left==x)
 38     {
 39         father[x]=z;father[y]=x;tree[y].left=tree[x].right;tree[x].right=y;father[tree[y].left]=y;
 40     }
 41     else
 42     {
 43         father[x]=z;father[y]=x;tree[y].right=tree[x].left;tree[x].left=y;father[tree[y].right]=y;
 44     }
 45 }
 46 void splay(int x)
 47 {
 48     int top=0,y,z,i;Stack[++top]=x;
 49     for(i=x;!isroot(i);i=father[i])Stack[++top]=father[i];
 50     for(i=top;i>=1;i--)pushdown(Stack[i]);
 51     while(!isroot(x))
 52     {
 53         y=father[x];z=father[y];
 54         if(!isroot(y))
 55         {
 56             if((tree[y].left==x)^(tree[z].left==y))rotate(x);
 57             else rotate(y);
 58         }
 59         rotate(x);
 60     }
 61 }
 62 void access(int x)
 63 {
 64     int last=0;
 65     while(x!=0)
 66     {
 67         splay(x);
 68         tree[x].right=last;
 69         last=x;x=father[x];
 70     }
 71 }
 72 void makeroot(int x)
 73 {
 74     access(x);splay(x);rev[x]^=1;
 75 }
 76 void link(int u,int v)
 77 {
 78     makeroot(u);/*access(u);*/father[u]=v;//splay(u);
 79 }
 80 void cut(int u,int v)
 81 {
 82     /*makeroot(u);*/access(u);access(v);splay(v);father[tree[v].left]=0;tree[v].left=0;
 83 }
 84 int findroot(int x)
 85 {
 86     access(x);splay(x);
 87     while(tree[x].left!=0)x=tree[x].left;
 88     return x;
 89 }
 90 int Findroot(int u,int v)
 91 {
 92     int pd=0;
 93     access(u);splay(u);
 94     while(tree[u].left!=0){if(tree[u].left==v){pd=1;break;}u=tree[u].left;}
 95     return pd;
 96 }
 97 int main()
 98 {
 99     int n,i,m,k,x,y,a,tt=0;
100     char fh[30];
101     while(scanf("%d",&n)!=EOF)
102     {
103         if(tt)puts("");
104         tt++;
105         for(i=1;i<=n;i++)
106         {
107             tree[i].left=tree[i].right=father[i]=rev[i]=cc[i]=0;
108         }
109         for(i=1;i<=n;i++)
110         {
111             a=read();
112             if(a!=0)
113             {
114                 link(i,a);
115                 cc[i]=a;
116             }
117         }
118         m=read();
119         for(i=1;i<=m;i++)
120         {
121             scanf("\n%s",fh);
122             if(fh[0]==‘Q‘)
123             {
124                 k=read();
125                 printf("%d\n",findroot(k));
126             }
127             else
128             {
129                 x=read();y=read();
130                 if(x!=0&&y!=0)
131                 {
132                     if(Findroot(y,x)==1)continue;
133                 }
134                 if(cc[x]!=0)
135                 {
136                     cut(x,cc[x]);
137                     //access(x);access(cc[x]);splay(cc[x]);father[tree[cc[x]].left]=0;tree[cc[x]].left=0;/*splay(cc[x]);*///father[x]=tree[cc[x]].left=0;
138                 }
139                 cc[x]=y;
140                 if(cc[x]!=0)
141                 {
142                     //link(x,cc[x]);
143                     access(x);father[x]=cc[x];//splay(x);
144                 }
145             }
146         }
147         //printf("\n");
148     }
149     return 0;
150 }

时间: 2024-10-12 17:36:45

存个代码,233的相关文章

一些常用到的键弹性域和存其代码组合的表

ID_FLEX_NAME -----------APPLICATION_TABLE_NAME --------------------------- ----------------------------------------------------------------- --------------------------------------------------------------------------------------------- Accounting Flex

git命令之git stash 暂存临时代码

git stash - 暂存临时代码 stash命令可以很好的解决这样的问题.当你不想提交当前完成了一半的代码,但是却不得不修改一个紧急Bug,那么使用'Git stash'就可以将你当前未提交到本地(和服务器)的代码推入到git的栈中,这时候你的工作区间和上一次提交的内容是完全一样的,所以你可以放心的修 Bug,等到修完Bug,提交到服务器上后,再使用'git stash apply'将以前一半的工作应用回来. 当你多次使用'git stash'命令后,你的栈里将充满了未提交的代码,这时候你会

终于可以看到了,可是不知道对不对,书上没int和string的部分,可是没有就有错,所以擅自加上了,书之后的部分不知能不能进行下去,不要错啊(哭),先存下代码(哈哈)。

using UnityEngine;using UnityEditor;using System.Collections;public class TileCreator : UnityEditor.EditorWindow { [MenuItem ("Tools/TileCreator")] static void Create(){ EditorWindow.GetWindow (typeof(TileCreator)); } int polySize,xCount,zCount;

poj1743 后缀数组, poj挂了 存个代码

#include<bits/stdc++.h> #define LL long long #define fi first #define se second #define mk make_pair #define pii pair<int, int> #define y1 skldjfskldjg #define y2 skldfjsklejg using namespace std; const int N = 1e5 + 7; const int M = 1e5 + 7;

存个代码

#include <iostream> #include <cstdio> #include <queue> #include <algorithm> #include <cmath> #include <cstring> #define inf 2147483647 #define N 1000010 #define p(a) putchar(a) #define For(i,a,b) for(int i=a;i<=b;++i

git stash暂存文件

git stash 可用来暂存当前正在进行的工作, 比如想pull 最新代码,但又不想提交代码.先git stash暂存,pull之后,用git stash pop或者git stash apply取回暂存的代码继续修改. git stash --help可以查看git stash的帮助信息. git stash pop取回最后一次暂存的信息,并在暂存列表中删除. git stash list列出已有的多次暂存的信息. git stash apply [email protected]{0}也可

如何选择版本控制系统之三---代码托管操作

往期文章: <如何选择版本控制系统 ---为什么选择Git版本控制系统> <如何选择版本控制系统之二---Git的研发应用场景> 跨地域开发的需求其实由来已久,并在IT/互联网高速发展的今天越来越普遍,这正是Git版本管理广泛流程的技术原因之一.对于一个开发者如何将本地代码提交到中央仓库,是保证高效异地协同的前提.本文将着重介绍将本地代码提交到托管平台的基本操作. 客户端工具:SourceTree 托管平台:华为软件开发云 如何将本体代码提交到托管平台 1.本地git工具安装&am

Docker镜像的创建、存出、载入

创建镜像的方法有三种:基于已有镜像的容器创建.基于本地模板导入.基于Dockerfile创建,本博文讲解前两种. 基于已有镜像的容器创建 该方法是使用docker commit命令,其命令格式为: docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]] 主要参数选项包括: -a ,–author=”” 作者信息 -m,–message=”” 提交信息 -p,–pause=true 提交是暂停容器运行 比如,先创建一个运行bash的ubuntu容器

好代码是管出来的——使用Git来管理源代码

软件开发过程中一个重要的产出就是代码,软件的编码过程一般是由一个团队共同完成,它是一个并行活动,为了保证代码在多人开发中能够顺利完成,我们需要使用代码版本控制工具来对代码进行统一存储,并追踪每一份代码的历史以便于对代码的更改进行追溯,另外一些版本控制工具还提供了冲突合并等高级功能来协调多人对同一代码文件修改.所以版本控制工具可以看做整个编码工作的基础,如果没有版本控制来统一代码库,那么对于复杂且参与人数较多的项目是难以完成的,同时如果没有统一的代码库基础,那么如持续集成.发布等工作将无法开展.