1 条题解

  • 0
    @ 2024-10-10 20:28:18

    一轮循环标记他所能到达的位置,同时统计颜色为 blackblack 的个数 cc, 二轮循环计算 F(i)F(i) 即循环内所有数 +c,+ c,

    /**
     *    author: 小飞侠
     *    created: 2024.10.09 20:35:11
     */
    #include <iostream>
    #include <string>
    using namespace std;
    const int N = 200010;
    int cnt[N], p[N], st[N];
    int t;
    int main()
    {
        cin >> t;
        while(t--)
        {
            int n;
            string s;
            cin >> n;
            for(int i = 1; i <= n; ++ i ) cin >> p[i];
            cin >> s;
    
            for (int i = 1; i <= n; ++ i )
            {
                if(st[i]) continue;
    
                int c = 0;
                while (!st[i])
                {
                    st[i] = 1;
                    c += s[i - 1] == '0';
                    i = p[i];
                }
    
                while(st[i] != 2)
                {
                    st[i] = 2;
                    cnt[i] = c;
                    i = p[i];
                }
            }
            for(int i = 1; i <= n; ++ i ) 
            {
                cout << cnt[i] << ' ';
            }
            cout << endl;
            for(int i = 1; i <= n; ++ i ) {p[i] = 0; st[i] = 0; cnt[i] = 0;}
    
        }
        return 0;
    }
    
    • 1

    信息

    ID
    5404
    时间
    1000ms
    内存
    256MiB
    难度
    3
    标签
    递交数
    6
    已通过
    3
    上传者