重新排列奶牛

C++

#include<bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
int a[N], b[N], p[N], s[N];
int find(int x)
{
    if(p[x] != x)p[x] = find(p[x]);
    return p[x];
}
int main()
{
    int n;
    cin >> n;
    for(int i = 1; i <= n; i ++)cin >> a[i];
    for(int i = 1; i <= n; i ++)
    {
        int x;
        cin >> x;
        b[x] = i;
    }
    for(int i = 1; i <= n; i ++)p[i] = i, s[i] = 1;
    for(int i = 1; i <= n; i ++)
    {
        int x = a[i], y = a[b[x]];
        if(find(x) != find(y))
        {
            s[find(y)] += s[find(x)];
            p[find(x)]  = find(y);
            
        }
    }
    int cnt = 0, mx = 0;
    for(int i = 1; i <= n; i ++)
    {
        if(find(i) == i && s[i] > 1)
        {
            cnt ++;
            mx = max(s[i], mx);
        }
    }
    if(!cnt)mx = -1;
        cout << cnt << " "<<mx<<endl;
    
}

Java

import java.util.*;
public class Main{
    public static int N = 110;
    public static int[] a = new int[N];
    public static int[] b = new int[N];
    public static int[] p = new int[N];
    public static int[] s = new int[N];
    public static void main(String[] args){
        Scanner cin = new Scanner(System.in);
        int n = cin.nextInt();
        for(int i = 1; i <= n; i ++)a[i] = cin.nextInt();
        for(int i = 1; i <= n; i ++)
        {
            int x = cin.nextInt();
            b[x] = i;
        }
        for(int i = 1; i <= n; i ++){
            p[i] = i;
            s[i] = 1;
        }
        for(int i = 1; i <= n; i ++)
        {
            int x = a[i], y = a[b[x]];
            if(find(x) != find(y))
            {
                s[find(y)] += s[find(x)];
                p[x] = find(y);
            }
        }
        int cnt = 0, mx = 0;
        for(int i = 1; i <= n; i++)
        {
            if(s[i] > 1 && find(i) == i)
            {
                cnt ++;
                if(mx < s[i])mx = s[i];
            }
        }
        if(cnt == 0)mx = -1;
        System.out.println(cnt + " " + mx);
    }
    public static int find(int x)
    {
        if(p[x] != x)p[x] = find(p[x]);
        return p[x];
    }
}
全部评论

相关推荐

03-03 19:02
已编辑
东华理工大学 Node.js
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
正在热议
更多
# 一张图晒出你司的标语 #
4472次浏览 78人参与
# 找AI工作可以去哪些公司? #
10192次浏览 322人参与
# 开放七大实习专项,百度暑期实习值得冲吗 #
15780次浏览 230人参与
# 你的实习产出是真实的还是包装的? #
20951次浏览 346人参与
# 从事AI岗需要掌握哪些技术栈? #
9889次浏览 397人参与
# 春招至今,你的战绩如何? #
68165次浏览 603人参与
# 厦门银行科技岗值不值得投 #
8263次浏览 188人参与
# AI面会问哪些问题? #
29225次浏览 638人参与
# 你做过最难的笔试是哪家公司 #
36179次浏览 319人参与
# 中国电信笔试 #
32411次浏览 302人参与
# 金三银四,你的春招进行到哪个阶段了? #
22601次浏览 284人参与
# 投递几十家公司,到现在0offer,大家都一样吗 #
341263次浏览 2176人参与
# 同bg的你秋招战况如何? #
212268次浏览 1121人参与
# 哪些公司真双非友好? #
69843次浏览 289人参与
# 如何准备秋招 #
78326次浏览 868人参与
# 阿里笔试 #
179514次浏览 1324人参与
# 应届生被毁约被毁意向了怎么办 #
63364次浏览 305人参与
# 机械人避雷的岗位/公司 #
62728次浏览 393人参与
# 小马智行求职进展汇总 #
25151次浏览 80人参与
# 第一份工作一定要去大厂吗 #
15279次浏览 128人参与
# 担心入职之后被发现很菜怎么办 #
291437次浏览 1210人参与
# 为了减少AI幻觉,你注入过哪些设定? #
26336次浏览 310人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务