11 条题解

  • 3
    @ 2023-9-23 20:39:54

    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
    int a,b;
    cin>>a>>b;
    cout<<a+b;
    return 0;
    }

    • 2

      思路

      我们可以把 aa 看作边 (0,1)(0,1)bb 看作 (1,2)(1,2) ,则只需要求 (0,2)(0,2) 的最短路即可。 考虑到边权可能为负,所以采用 floyd 算法。

      code

      #include <algorithm> //STL 通用算法
      #include <bitset>//STL 位集容器
      #include <cctype>         //字符处理
      #include <cerrno>  //定义错误码
      #include <cfloat> //浮点数处理
      #include <ciso646>         //对应各种运算符的宏
      #include <climits> //定义各种数据类型最值的常量
      #include <clocale> //定义本地化函数
      #include <cmath> //定义数学函数
      #include <complex> //复数类
      #include <csignal>         //信号机制支持
      #include <csetjmp>         //异常处理支持
      #include <cstdarg>         //不定参数列表支持
      #include <cstddef>         //常用常量
      #include <cstdio>  //定义输入/输出函数
      #include <cstdlib> //定义杂项函数及内存分配函数
      #include <cstring> //字符串处理
      #include <ctime> //定义关于时间的函数
      #include <cwchar>  //宽字符处理及输入/输出
      #include <cwctype> //宽字符分类
      #include <deque> //STL 双端队列容器
      #include <exception> //异常处理类
      #include <fstream>  //文件输入/输出
      #include <functional>//STL 定义运算函数(代替运算符)
      #include <limits>  //定义各种数据类型最值常量
      #include <list>//STL 线性列表容器
      #include <locale>//本地化特定信息
      #include <map> //STL 映射容器
      #include <memory>//STL通过分配器进行的内存分配
      #include<new>//动态内存分配
      #include <numeric>//STL常用的数字操作
      #include <iomanip>  //参数化输入/输出
      #include <ios> //基本输入/输出支持
      #include <iosfwd>//输入/输出系统使用的前置声明
      #include <iostream> //数据流输入/输出
      #include <istream> //基本输入流
      #include <iterator>        //STL迭代器
      #include <ostream> //基本输出流
      #include <queue> //STL 队列容器
      #include <set> //STL 集合容器
      #include <sstream> //基于字符串的流
      #include <stack> //STL 堆栈容器
      #include <stdexcept> //标准异常类
      #include <streambuf> //底层输入/输出支持
      #include <string>//字符串类
      #include <typeinfo>        //运行期间类型信息
      #include <utility> //STL 通用模板类
      #include <valarray>        //对包含值的数组的操作
      #include <vector>//STL 动态数组容器
      using namespace std;
      int edge[5][5];
      int main(){
         memset(edge,0x1f,sizeof(edge));
         int a,b;
         cin>>a>>b;
         edge[0][1]=a;//建边
         edge[1][2]=b;//建边
         for(int k=0;k<=2;k++){//Floyd
            for(int i=0;i<=2;i++){
                  for(int j=0;j<=2;j++){
                     edge[i][j]=min(edge[i][j],edge[i][k]+edge[k][j]);
               }
            }
         }
         cout<<edge[0][2];
         return 0;
      }
      
      • 1

        王者策划加强李信

        • 1
          @ 2023-9-23 20:43:10
          #include<iostream>
          #include<cstring>
          #include<cstdio>
          #include<cstring>
          using namespace std;
          struct node 
          {
              int data,rev,sum;
              node *son[2],*pre;
              bool judge();
              bool isroot();
              void pushdown();
              void update();
              void setson(node *child,int lr);
          }lct[233];
          int top,a,b;
          node *getnew(int x)
          {
              node *now=lct+ ++top;
              now->data=x;
              now->pre=now->son[1]=now->son[0]=lct;
              now->sum=0;
              now->rev=0;
              return now;
          }
          bool node::judge(){return pre->son[1]==this;}
          bool node::isroot()
          {
              if(pre==lct)return true;
              return !(pre->son[1]==this||pre->son[0]==this);
          }
          void node::pushdown()
          {
              if(this==lct||!rev)return;
              swap(son[0],son[1]);
              son[0]->rev^=1;
              son[1]->rev^=1;
              rev=0;
          }
          void node::update(){sum=son[1]->sum+son[0]->sum+data;}
          void node::setson(node *child,int lr)
          {
              this->pushdown();
              child->pre=this;
              son[lr]=child;
              this->update();
          }
          void rotate(node *now)
          {
              node *father=now->pre,*grandfa=father->pre;
              if(!father->isroot()) grandfa->pushdown();
              father->pushdown();now->pushdown();
              int lr=now->judge();
              father->setson(now->son[lr^1],lr);
              if(father->isroot()) now->pre=grandfa;
              else grandfa->setson(now,father->judge());
              now->setson(father,lr^1);
              father->update();now->update();
              if(grandfa!=lct) grandfa->update();
          }
          void splay(node *now)
          {
              if(now->isroot())return;
              for(;!now->isroot();rotate(now))
              if(!now->pre->isroot())
              now->judge()==now->pre->judge()?rotate(now->pre):rotate(now);
          }
          node *access(node *now)
          {
              node *last=lct;
              for(;now!=lct;last=now,now=now->pre)
              {
                  splay(now);
                  now->setson(last,1);
              }
              return last;
          }
          void changeroot(node *now)
          {
              access(now)->rev^=1;
              splay(now);
          }
          void connect(node *x,node *y)
          {
              changeroot(x);
              x->pre=y;
              access(x);
          }
          void cut(node *x,node *y)
          {
              changeroot(x);
              access(y);
              splay(x);
              x->pushdown();
              x->son[1]=y->pre=lct;
              x->update();
          }
          int query(node *x,node *y)
          {
              changeroot(x);
              node *now=access(y);
              return now->sum;
          }
          int main()
          {
              scanf("%d%d",&a,&b);
              node *A=getnew(a);
              node *B=getnew(b);
              //连边 Link
                  connect(A,B);
              //断边 Cut
                  cut(A,B);
              //再连边orz Link again
                  connect(A,B);
              printf("%d\n",query(A,B)); 
              return 0;
          }
          
          • 1
            @ 2023-9-23 20:40:14

            很简单的一道题 终于可以写一份A+B这么难的题的题解了。

            咦?竟然没有人写LCT的题解?

            Link-Cut Tree 会很伤心的!

            ORZ为了不让LCT伤心于是我来一份LCT的A+B题解吧!

            送上代码:

            #include<iostream>
            #include<cstring>
            #include<cstdio>
            #include<cstring>
            using namespace std;
            struct node 
            {
                int data,rev,sum;
                node *son[2],*pre;
                bool judge();
                bool isroot();
                void pushdown();
                void update();
                void setson(node *child,int lr);
            }lct[233];
            int top,a,b;
            node *getnew(int x)
            {
                node *now=lct+ ++top;
                now->data=x;
                now->pre=now->son[1]=now->son[0]=lct;
                now->sum=0;
                now->rev=0;
                return now;
            }
            bool node::judge(){return pre->son[1]==this;}
            bool node::isroot()
            {
                if(pre==lct)return true;
                return !(pre->son[1]==this||pre->son[0]==this);
            }
            void node::pushdown()
            {
                if(this==lct||!rev)return;
                swap(son[0],son[1]);
                son[0]->rev^=1;
                son[1]->rev^=1;
                rev=0;
            }
            void node::update(){sum=son[1]->sum+son[0]->sum+data;}
            void node::setson(node *child,int lr)
            {
                this->pushdown();
                child->pre=this;
                son[lr]=child;
                this->update();
            }
            void rotate(node *now)
            {
                node *father=now->pre,*grandfa=father->pre;
                if(!father->isroot()) grandfa->pushdown();
                father->pushdown();now->pushdown();
                int lr=now->judge();
                father->setson(now->son[lr^1],lr);
                if(father->isroot()) now->pre=grandfa;
                else grandfa->setson(now,father->judge());
                now->setson(father,lr^1);
                father->update();now->update();
                if(grandfa!=lct) grandfa->update();
            }
            void splay(node *now)
            {
                if(now->isroot())return;
                for(;!now->isroot();rotate(now))
                if(!now->pre->isroot())
                now->judge()==now->pre->judge()?rotate(now->pre):rotate(now);
            }
            node *access(node *now)
            {
                node *last=lct;
                for(;now!=lct;last=now,now=now->pre)
                {
                    splay(now);
                    now->setson(last,1);
                }
                return last;
            }
            void changeroot(node *now)
            {
                access(now)->rev^=1;
                splay(now);
            }
            void connect(node *x,node *y)
            {
                changeroot(x);
                x->pre=y;
                access(x);
            }
            void cut(node *x,node *y)
            {
                changeroot(x);
                access(y);
                splay(x);
                x->pushdown();
                x->son[1]=y->pre=lct;
                x->update();
            }
            int query(node *x,node *y)
            {
                changeroot(x);
                node *now=access(y);
                return now->sum;
            }
            int main()
            {
                scanf("%d%d",&a,&b);
                node *A=getnew(a);
                node *B=getnew(b);
                //连边 Link
                    connect(A,B);
                //断边 Cut
                    cut(A,B);
                //再连边orz Link again
                    connect(A,B);
                printf("%d\n",query(A,B)); 
                return 0;
            }
            
            • 1
              @ 2023-9-23 20:38:04

              #include<bits/stdc++.h> using namespace std; int main() { int a,b; cin>>a>>b; cout<<a+b; return 0; }

              • 0
                @ 2024-12-4 13:27:42

                #include<bits/stdc++.h> using namespace std; int a[1000000]; int main() { int n,t; cin>>n; for(int i=1;i<=n;i++) { cin>>a[i]; } t=a[0]; for(int i=n;i>=1;i--)

                	{
                		
                	cin>>a[i];
                	cout<<a[i]<<" ";}
                 	return 0; 
                }
                
                • 0

                  #include<bits/stdc++.h> using namespace std; int main() { int a,b,c,d,e,f,g,h; cin>>a>>b>>c; d=a/1000+a%1000/100+a%100/10+a%10; if(b>=10){ e=(b/10+b%10); } else{ e=b; } if(c>=10) { f=c/10+c%10; } else{ f=c; } g=d+e+f; h=g/10+g%10; cout<<h<<endl; return 0; }

                  • 0
                    @ 2024-11-10 13:41:15

                    各位大佬们不要在炸鱼为难新手了,这道题其实很简单 #include<iostream> using namespace std; int main() { int a,b; cin>>a>>b; cout<<a+b; return 0; }

                    • 0

                      #include<iosetream> using namespace std {int a,b int main() cin>>a>>b if(a>b) {cout<<"yes"<<endl } return0 }

                      • 0
                        @ 2023-9-23 20:42:14

                        转载自https://www.luogu.com.cn/problem/solution/P1001

                        ~看来还没人用Splay,赶紧水一发~

                        因为加法满足交换律,所以我们可以把序列翻转一下,所求的总和不变

                        序列反转自然而然就能想到Splay啦

                        代码送上

                        //一颗资瓷区间加、区间翻转、区间求和的Splay
                        #include <bits/stdc++.h>
                        #define ll long long
                        #define N 100000
                        using namespace std;
                        int sz[N], rev[N], tag[N], sum[N], ch[N][2], fa[N], val[N];
                        int n, m, rt, x;
                        void push_up(int x){
                            sz[x] = sz[ch[x][0]] + sz[ch[x][1]] + 1;
                            sum[x] = sum[ch[x][1]] + sum[ch[x][0]] + val[x];
                        }
                        void push_down(int x){
                            if(rev[x]){
                                swap(ch[x][0], ch[x][1]);
                                if(ch[x][1]) rev[ch[x][1]] ^= 1;
                                if(ch[x][0]) rev[ch[x][0]] ^= 1;
                                rev[x] = 0;
                            }
                            if(tag[x]){
                                if(ch[x][1]) tag[ch[x][1]] += tag[x], sum[ch[x][1]] += tag[x];
                                if(ch[x][0]) tag[ch[x][0]] += tag[x], sum[ch[x][0]] += tag[x];
                                tag[x] = 0;
                            }
                        }
                        void rotate(int x, int &k){
                            int y = fa[x], z = fa[fa[x]];
                            int kind = ch[y][1] == x;
                            if(y == k) k = x;
                            else ch[z][ch[z][1]==y] = x;
                            fa[x] = z; fa[y] = x; fa[ch[x][!kind]] = y;
                            ch[y][kind] = ch[x][!kind]; ch[x][!kind] = y;
                            push_up(y); push_up(x);
                        }
                        void splay(int x, int &k){
                            while(x != k){
                                int y = fa[x], z = fa[fa[x]];
                                if(y != k) if(ch[y][1] == x ^ ch[z][1] == y) rotate(x, k);
                                else rotate(y, k);
                                rotate(x, k);
                            }
                        }
                        int kth(int x, int k){
                            push_down(x);
                            int r = sz[ch[x][0]]+1;
                            if(k == r) return x;
                            if(k < r) return kth(ch[x][0], k);
                            else return kth(ch[x][1], k-r);
                        }
                        void split(int l, int r){
                            int x = kth(rt, l), y = kth(rt, r+2);
                            splay(x, rt); splay(y, ch[rt][1]);
                        }
                        void rever(int l, int r){
                            split(l, r);
                            rev[ch[ch[rt][1]][0]] ^= 1;
                        }
                        void add(int l, int r, int v){
                            split(l, r);
                            tag[ch[ch[rt][1]][0]] += v;
                            val[ch[ch[rt][1]][0]] += v;
                            push_up(ch[ch[rt][1]][0]);
                        }
                        int build(int l, int r, int f){
                            if(l > r) return 0;
                            if(l == r){
                                fa[l] = f;
                                sz[l] = 1;
                                return l;
                            }
                            int mid = l + r >> 1;
                            ch[mid][0] = build(l, mid-1, mid);
                            ch[mid][1] = build(mid+1, r, mid);
                            fa[mid] = f;
                            push_up(mid);
                            return mid;
                        }
                        int asksum(int l, int r){
                            split(l, r);
                            return sum[ch[ch[rt][1]][0]];
                        }
                        int main(){
                            //总共两个数
                            n = 2;
                            rt = build(1, n+2, 0);//建树
                            for(int i = 1; i <= n; i++){
                                scanf("%d", &x);
                                add(i, i, x);//区间加
                            }
                            rever(1, n);//区间翻转
                            printf("%d\n", asksum(1, n));//区间求和
                            return 0;
                        }
                        
                        • 1

                        信息

                        ID
                        1
                        时间
                        1000ms
                        内存
                        64MiB
                        难度
                        3
                        标签
                        递交数
                        296
                        已通过
                        161
                        上传者