제출 #1356308

#제출 시각아이디문제언어결과실행 시간메모리
1356308silence25Krugomet (COCI25_krugomet)C++20
70 / 70
35 ms26160 KiB
#include "bits/stdc++.h"

using namespace std;

#define ff first
#define ss second
#define pp pop_back
#define ll long long
#define pb push_back
#define pq priority_queue
#define ls(v) (ll)v.size()
#define all(v) v.begin(),v.end()
#define rall(v) v.rbegin(),v.rend()
#define wr cout << "------------------------" << endl
#define tt debug

const ll LOG = 31;
const ll N = 1e5 + 5;
ll an[N][LOG];
ll ans[N];
ll a[N];
ll cnt[N];

signed main(){
#ifdef parad0x
    freopen("file.in","r",stdin);
#endif
    #define prll(...) 42

    
    ios::sync_with_stdio(false);cin.tie(nullptr);
    ll n,idx;
    cin >> n >> idx;
    for(ll i = 1;i<=n;++i)
        cin >> a[i], ans[i] = i;
    for(ll i = 1;i<=n;++i)
        cin >> an[i][0];
    for(ll k = 1;k<LOG;++k)
        for(ll i = 1;i<=n;++i)
            an[i][k] = an[an[i][k - 1]][k - 1];
    for(ll k = LOG - 1;~k;--k)
        if(idx>>k&1)
            for(ll i = 1;i<=n;++i)
                ans[i] = an[ans[i]][k];
    for(ll i = 1;i<=n;++i)
        cnt[ans[i]] += a[i];
    ll res = 0;
    for(ll i = 1;i<=n;++i)
        if(cnt[res] < cnt[i])
            res = i;
    cout << cnt[res] << endl;
    for(int i = 1;i<=n;++i)
        if(cnt[i] == cnt[res])
            cout << i << ' ';
    cout << endl;
    return 0;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…