4 条题解

  • 5
    @ 2023-8-2 22:45:14

    UP回顾L11,感悟(挺简单的嘛!)

    OK,进入正题,这一题是L11-1的内容,求深度

    1. 用 vector 类型的 e[i] 表示以 i 为节点的子节点编号有哪些
    2. 求深度,通过递归的方式深度搜索整棵树,每个节点的子节点都是其父节点的深度+1
    3. 这一题有所改变,求树的深度,那就把最大值求出来即可,只要在递归时加一个max语句就行

    那思路就到这,这题很简单……(行行行,代码给你们)

    #include <bits/stdc++.h>
    
    using namespace std;
    const int N = 10005;
    vector <int> e[N];
    int n, a, b, ans = 1, de[N];
    
    void dfs(int u)
    {
        for (int i = 0; i < e[u].size(); i++)
        {
            int v = e[u][i];
            de[v] = de[u] + 1;
            ans = max(de[v], ans);
            dfs(v);
        }
    }
    
    int main()
    {
        ios::sync_with_stdio(false);
        cin.tie(0); cout.tie(0);
    
        cin >> n;
        while (cin >> a >> b)
            e[a].push_back(b);
    
        de[1] = 1;
        dfs(1);
        cout << ans;
    
        return 0;
    }
    

    L11的第一篇题解

    完结撒花~✿✿ヽ(°▽°)ノ✿

    • 1
      @ 2023-3-27 19:32:04

      递归,深度优先

      #include<bits/stdc++.h>
      using namespace std;
      int n,ans;
      vector<int> awa[27];
      void m(int x,int d)
      {
          ans=max(ans,d);
          for (int i=0;i<awa[x].size();i++)
              m(awa[x][i],d+1);
      }
      int main()
      {
          cin>>n;
          for (int i=1;i<=n;i++)
          {
              int a,b;
              cin>>a>>b;
              awa[a].push_back(b);
          }
          m(1,1);
          cout<<ans;
          return 0;
      }
      
      • 1
        @ 2023-1-9 12:29:46

        这道题要用到vector

        #include <bits/stdc++.h>
        using namespace std;
        int n,a,b,ans = 1;      //ans表示深度,初始深度为1
        vector<int> e[105];
        void dfs(int u,int d) //u为节点编号,d为深度
        {
        	for (int i = 0;i < e[u].size();i++)
        	{
        		int v = e[u][i];
        		dfs(v,d+1);
        	}
        	ans = max(ans,d);    //只要求最大值就行了
        }
        int main()
        {
        	ios::sync_with_stdio(false);
        	cin.tie(0);
        	cout.tie(0);
        	
        	cin >> n;
        	for (int i = 1;i < n;i++)
        	{
        		cin >> a >> b;
        		e[a].push_back(b);         //输入。e[a]的子节点加上b
        	}
        	dfs(1,1);             //从1号节点,深度为1开始搜
        	cout << ans << endl;
        	return 0;
        }
        
        • -6
          @ 2022-4-24 16:52:23

          写题解请注意

          鼓励大家写题解,但注意题解格式。

          题解一定要有思路解析或代码注释,能否让别人理解你的思路

          也是你的能力的检验,不要只放无意义的代码给大家复制,那就失去了做题的初心。

          给代码两端加上这个会舒服一些

          ```cpp

          你的代码

          ```

          </span>

          这个点在键盘的左上角tab上面那个键,注意切换输入法

          #include<iostream>
          using namespace std;
          int main()
          {
              int n;
              cin>>n;//这是一个注释
              return 0;
          } 
          

          请注意严禁抄袭题解,写题解不要只放代码,需加上你的思路或代码注释。

          抄袭题解一经发现直接取消成绩。

          题解被删除的可能

          1. 代码不符合格式规范
          2. 没有思路讲解或者没有注释,
          3. 无意义的题解

          大家携手共同维护一个良好的编程环境,如果一经发现,多次作乱。可能会被管理员拉黑,请注意,一旦拉黑即失去登陆资格。

          • 1

          信息

          ID
          1166
          时间
          1000ms
          内存
          128MiB
          难度
          2
          标签
          递交数
          131
          已通过
          77
          上传者