zoukankan      html  css  js  c++  java
  • BZOJ 2049 LCT

        Orz 黄学长, 当然也要感谢自己(这次打的比较顺利,虽然题目操作很少,也比较简单),加油, 相信自己, 会更强大的, 但还是要虚心, 才会有更大的进步。 不过还是有点不懂,找个时间,问一下czl吧!

      1 #include<cstdio>
      2 #include<iostream>
      3 #include<cstring>
      4 #define rep(i,j,k) for(int i = j; i <= k; i++)
      5 #define lc c[k][0]
      6 #define rc c[k][1]
      7 #define maxn 10233
      8 using namespace std;
      9 
     10 int n, m;
     11 int read()
     12 {
     13     int s = 0, t = 1; char c = getchar();
     14     while( !isdigit(c) ){
     15         if( c == '-' ) t = -1; c = getchar();
     16     }
     17     while( isdigit(c) ){
     18         s = s * 10 + c - '0'; c = getchar();
     19     }
     20     return s * t;
     21 }
     22 
     23 int c[maxn][2], pa[maxn];
     24 bool rev[maxn];
     25 int q[maxn];
     26 
     27 inline bool root(int x)
     28 {
     29     int k = pa[x];
     30     return lc != x && rc != x; 
     31 }
     32 
     33 void pushdown(int k)
     34 {
     35     if( rev[k] ){
     36         rev[lc] ^= 1, rev[rc] ^= 1;
     37         swap(lc,rc);
     38         rev[k] ^= 1;
     39     }
     40 } 
     41 
     42 void rorate(int k)
     43 {
     44     int fa = pa[k], gfa = pa[fa];
     45     int l = c[fa][1] == k, r = l ^ 1;
     46     if( !root(fa) ){
     47         c[gfa][c[gfa][1] == fa] = k;
     48     }    
     49     pa[k] = gfa, pa[c[k][r]] = fa, pa[fa] = k;
     50     c[fa][l] = c[k][r]; c[k][r] = fa; 
     51 }
     52 
     53 void splay(int k)
     54 {
     55     int top = 0;
     56     q[++top] = k;
     57     for( int x = k; !root(x); x = pa[x] ){
     58         q[++top] = pa[x];
     59     }
     60     while( top ) pushdown(q[top--]);
     61     while( !root(k) ){
     62         int fa = pa[k], gfa = pa[fa];
     63         if( !root(fa) ){
     64             if( c[fa][0] == k ^ c[gfa][0] == fa ) rorate(k);
     65             else rorate(fa);
     66         }
     67         rorate(k);
     68     } 
     69 }
     70 
     71 void access(int x)
     72 {
     73     for(int t = 0; x; t = x, x = pa[x]){
     74         splay(x), c[x][1] = t;
     75     }
     76 }
     77 
     78 void makeroot(int x)
     79 {
     80     access(x), splay(x); rev[x] ^= 1;
     81 }
     82 
     83 void link(int x,int y)
     84 {
     85     makeroot(x); pa[x] = y; splay(x);
     86 }
     87 
     88 void cut(int x,int y)
     89 {
     90     makeroot(x); access(y), splay(y); c[y][0] = pa[x] = 0;
     91 }
     92 
     93 int find(int k)
     94 {
     95     access(k); splay(k);
     96     while( lc ) k = lc;
     97     return k; 
     98 }
     99 
    100 bool solve(int x,int y)
    101 {
    102     if( find(x) == find(y) ) return 1;
    103     else return 0;
    104 }
    105 
    106 int main()
    107 {
    108     n = read(), m = read(); char c[10];
    109     rep(i,1,m){
    110         scanf("%s", c);
    111         int x = read(), y = read();
    112         if( c[0] == 'C' ){
    113             link(x,y);
    114         }
    115         if( c[0] == 'Q' ){
    116             if( solve(x,y) ) puts("Yes");
    117             else puts("No");
    118         }
    119         if( c[0] == 'D' ){
    120             cut(x,y);
    121         }
    122     }
    123     return 0;
    124 }
  • 相关阅读:
    Could A New Linux Base For Tablets/Smartphones Succeed In 2017?
    使用libhybris,glibc和bionic共存时的TLS冲突的问题
    6 Open Source Mobile OS Alternatives To Android in 2018
    Using MultiROM
    GPU drivers are written by the GPU IP vendors and they only provide Android drivers
    Jolla Brings Wayland Atop Android GPU Drivers
    How to Use Libhybris and Android GPU Libraries with Mer (Linux) on the Cubieboard
    闲聊Libhybris
    【ARM-Linux开发】wayland和weston的介绍
    Wayland and X.org problem : Why not following the Android Solution ?
  • 原文地址:https://www.cnblogs.com/83131yyl/p/5114190.html
Copyright © 2011-2022 走看看