乱搞题
来源:互联网 发布:冰原狙击淘宝上有卖吗 编辑:程序博客网 时间:2024/05/21 10:48
一开始题读错了。。MDZZ。。
然而,用我理解的较为复杂的题意还是A了此题。。
2333
当然原题就是智障LCA
code:
#include<cstdio>#include<iostream>#include<cmath>#include<algorithm>#include<cstring>using namespace std;#define maxn 40010void read(int& x){char c = getchar();x = 0;bool flag = false;while(c<'0'||c>'9')c=='-'?flag=true:1,c=getchar();while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}flag?x=-x:1;}/////////////////////////////////////int n,m,a,b,root;//,size;//vector<int> e[maxn];//int dis[maxn],kind[maxn];struct edge{int to,next;}e[maxn];int head[maxn];bool del[maxn];int eid,link[maxn],dis[maxn];inline void adde(int u,int v){e[eid].to = v;e[eid].next=head[u];head[u]=eid++;}void btree(int u){for(int i=head[u];~i;i=e[i].next){if(del[i])continue;int v = e[i].to;if(!~link[v]){link[v] = i;dis[v] = dis[u]+1;btree(v);}else{if(dis[v]<dis[u]+1){del[link[v]]=true;link[v]=i;dis[v] = dis[u]+1;btree(v);}else del[i]=true;}}}//////////////////////////////////////*void dfs(int u,int d,int k){if(dis[u]>d)return;kind[u] = k;dis[u] = d;int sz = e[u].size();if(sz==1)dfs(e[u][0],d+1,u);for(int i=0;i<sz;i++)dfs(e[u][i],d+1);}*/int f[maxn][25];//,d[maxn];void dfs(int u,int fa){f[u][0]=fa;//d[u] = d[fa]+1;for(int i=1;i<=20;i++)f[u][i]=f[f[u][i-1]][i-1];for(int i=head[u];~i;i=e[i].next){if(del[i])continue;//d[e[i].to]=d[u]+1;dfs(e[i].to,u);}}int LCA(int x,int y){if(dis[x]>dis[y])swap(x,y);int i;for(int i=20;i>=0;i--){if(dis[f[y][i]]>=dis[x])y = f[y][i];}for(int i=20;i>=0;i--){if(f[x][i]==f[y][i])continue;x = f[x][i];y = f[y][i];}if(x==y)return x;else return f[y][0];}int main(void){#define ACK#ifdef ACKfreopen("tree.in","r",stdin);freopen("tree.out","w",stdout);#endifmemset(head,-1,sizeof(head));memset(link,-1,sizeof(link));read(n);for(int i=1;i<=n;i++){read(a),read(b);if(b==-1)root=a;else adde(b,a);//e[b].push_back(a);}dis[root]=1;btree(root);//size = e[root].size();/*for(int i=0;i<size;i++){k = e[root][i];kind[k]=k;dfs(k,1,k);}*/dfs(root,0);read(m);for(int i=1;i<=m;i++){read(a),read(b);if(a==root)puts("1");else if(b==root)puts("2");else if(a==b)puts("0");/*else{if(kind[a]!=kind[b])puts("0");else{if(dis[a]>dis[b])puts("2");else if(dis[a]<dis[b])puts("1");else puts("0");}}*/else{int p = LCA(a,b);if(p==a)puts("1");else if(p==b)puts("2");else puts("0");}}return 0;}
1 0
- 乱搞题
- 乱搞题
- POJ 1654 乱搞题?
- 乱搞
- 乱搞
- Uva100——乱搞题
- 【bitset乱搞】BZOJ3687 简单题
- POJ 3077-Rounders(水题乱搞)
- Codefoces 520C DNA Alignment 乱搞题
- [UOJ 82]水题生成器(乱搞)
- URAL 1720 Summit Online Judge 乱搞题
- [BZOJ 4300] 绝世好题 · 乱搞
- 一道乱搞题并不能ac.
- 【codeforces 732C】 Sanatorium【乱搞题 数学题】
- HDU 5938 Four Operations (水题乱搞)
- [NOIP模拟题][模拟][DP][乱搞]
- [NOIP模拟题][DFS][DP][乱搞]
- qbxt Day 4 乱搞+乱搞+乱搞
- 10^11内素数统计
- coredump
- WGS84、GCJ02坐标相关
- linux 使用系统接口实现复制文件
- 排序算法的时间复杂度和空间复杂度
- 乱搞题
- java工厂模式详解
- 均值模糊调试遇到的问题
- char *a 与char a[] 的区别和char** argv与char *argv[]区别
- 修改mysql数据库允许远程访问
- 2016.09.17 初中部 NOIP普及组 模拟赛
- TensorFlow多GPU并行计算
- hdu5900 区间dp
- Codeforces Problem 712A Memory and Crow