184492025-10-22 20:37:59ubormaciVárosnézéscpp17Hibás válasz 0/8017ms3188 KiB
#include <iostream>
#include <algorithm> // for sort, mainly
#include <vector>
#include <map>
#include <set>
#include <cmath>
#include <array>
#include <string>
#include <cstdio>
#include <iterator>
#include <unordered_set>
#include <cstdint> // for int64_t, int32_t, etc
#include <queue>
#include <stack>
#include <deque>
#include <numeric> // gcd, lcm
#include <fstream>
#include <bitset> // for bitset
#include <iomanip>
#include <cassert> // for set with custom ordering
#include <type_traits> // for set with custom ordering
#include <utility> // for swap, forward, etc
using namespace std;

#pragma GCC optimize("O2")
// #pragma GCC optimize("O1","O2","O3","Ofast","unroll-loops")
//#pragma GCC target("sse","sse2","sse3","sse4.1","sse4.2","avx","avx2","fma")

template<typename A, typename B> ostream& operator<<(ostream &os, const pair<A, B> &p) { return os << '(' << p.first << ", " << p.second << ')'; }
template<typename T_container, typename T = typename enable_if<!is_same<T_container, string>::value, typename T_container::value_type>::type> ostream& operator<<(ostream &os, const T_container &v) { os << '{'; string sep; for (const T &x : v) os << sep << x, sep = ", "; return os << '}'; }
void dbg_out() { cout << endl; }
template<typename Head, typename... Tail> void dbg_out(Head H, Tail... T) { cout << ' ' << H; dbg_out(T...); }
#ifdef LOCAL
#define dbg(...) cout << "(" << #__VA_ARGS__ << "):", dbg_out(__VA_ARGS__)
#else
#define dbg(...)
#endif

/*
 *
 * notes:
 *
 * int64_t
 * stoi(string s) -> string to int
 * to_string() -> int (or else) to string
 *
 * vector declaration:
 * vector<ll> v(n, 0)
 * vector<vector<ll>> v(n, vector<ll>(n, 0));
 *
 * {if statement} ? {truth value} : {false value}
 *
 * set lower bound/upper bound:
 * 	// . . . m1 . . . d . . . . m2
 *    auto m1_it = b.lower_bound(d);
 *    advance(m1_it, -1);
 *    m1 = *m1_it;
 *	m2 = *b.upper_bound(d);
 *
 * #ifdef LOCAL
 *    freopen("in.txt","r",stdin);
 *    freopen("out.txt","w",stdout);
 * #endif
 *
 * constexpr auto lcm(auto x, auto... xs)
 * {
 *	return ((x = std::lcm(x, xs)), ...);
 * }
 *
 * std::gcd(int a, int b)
 *
 * cout << setprecision(n);
 *
 * set with custom ordering
 * set<ll, decltype(&cmp)> qu(cmp);
 *
 */

typedef int64_t ll;

void solve() {

    ll n, m;
    cin >> n >> m;
    vector<ll> dp(n+1, 0);
    vector<ll> v(n+1, 0);
    vector<vector<ll>> out(n+1);
    vector<vector<ll>> in(n+1);
    vector<ll> ind(n+1, 0); // indegree

    for(ll i = 1; i <= n; i++) {
        cin >> v[i];
        dp[i] = v[i];
    }

    for(ll i = 0; i < m; i++) {
        ll from, to;
        cin >> from >> to;  
        out[from].push_back(to);
        ind[to]++;
        in[to].push_back(from);
    }

    queue<ll> q;
    vector<ll> ts(n, 0);
    ll tind = 0;

    for(ll i = 1; i <= n; i++) {
        if(ind[i] == 0) {
            q.push(i);
        }
    }
    
    while(!q.empty()) {
        ll curr = q.front();
        q.pop();

        ts[tind] = curr;
        tind++;

        for(const auto & x : out[curr]) {
            ind[x]--;
            if(ind[x] == 0) {
                q.push(x);
            }
        }
    }

    //cerr << "\nts=" << ts;

    vector<ll> p(n+1, -1);

    ll mxdp = 0;
    ll mxnode = -1;

    for(const auto & node : ts) {

        ll mx = 0;
        ll parent = -1;
        for(const auto & here : in[node]) {
            if(dp[here] > mx) {
                mx = dp[here];
                parent = here;
            }
        }

        p[node] = parent;
        dp[node] += mx;
        if(dp[node] > mxdp) {
            mxdp = dp[node];
            mxnode = node;
        }
    }

    //cerr << "\ndp=" << dp;

    vector<ll> res;
    ll curr = mxnode;
    while(curr != -1) {
        res.push_back(curr);
        curr = p[curr];
    }

    reverse(res.begin(), res.end());
    cout << mxdp << "\n";
    for(const auto & x : res) {
        cout << x << " ";
    }



}

int main()
{
    std::ios_base::sync_with_stdio(false);
    //cin.tie(nullptr);
    //cout.tie(nullptr);

    solve();

    return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva1ms316 KiB
subtask20/20
2Elfogadva1ms500 KiB
3Elfogadva1ms316 KiB
4Hibás válasz1ms508 KiB
5Hibás válasz4ms820 KiB
6Hibás válasz2ms564 KiB
7Hibás válasz6ms1332 KiB
8Hibás válasz4ms1408 KiB
9Elfogadva1ms316 KiB
10Hibás válasz9ms2440 KiB
11Hibás válasz1ms316 KiB
12Hibás válasz1ms316 KiB
subtask30/25
13Elfogadva1ms316 KiB
14Elfogadva1ms316 KiB
15Elfogadva1ms316 KiB
16Elfogadva1ms316 KiB
17Elfogadva1ms316 KiB
18Elfogadva1ms316 KiB
19Hibás válasz1ms316 KiB
20Hibás válasz1ms316 KiB
21Hibás válasz1ms316 KiB
22Hibás válasz2ms564 KiB
23Hibás válasz1ms568 KiB
24Hibás válasz2ms564 KiB
25Hibás válasz2ms516 KiB
26Hibás válasz2ms564 KiB
27Hibás válasz3ms568 KiB
28Hibás válasz14ms1772 KiB
29Hibás válasz3ms612 KiB
30Hibás válasz16ms1984 KiB
31Hibás válasz9ms1592 KiB
32Hibás válasz17ms2412 KiB
33Hibás válasz7ms2360 KiB
subtask40/20
34Elfogadva1ms320 KiB
35Hibás válasz1ms508 KiB
36Elfogadva1ms316 KiB
37Hibás válasz1ms316 KiB
38Hibás válasz1ms316 KiB
39Hibás válasz1ms320 KiB
40Hibás válasz1ms316 KiB
41Hibás válasz1ms500 KiB
42Hibás válasz1ms320 KiB
43Hibás válasz1ms316 KiB
44Hibás válasz1ms508 KiB
45Hibás válasz1ms316 KiB
46Hibás válasz1ms508 KiB
47Hibás válasz1ms376 KiB
48Hibás válasz1ms316 KiB
49Hibás válasz1ms316 KiB
50Elfogadva1ms316 KiB
51Elfogadva1ms316 KiB
52Elfogadva1ms508 KiB
53Hibás válasz1ms316 KiB
54Elfogadva1ms316 KiB
55Elfogadva1ms316 KiB
56Elfogadva1ms316 KiB
57Elfogadva1ms508 KiB
58Elfogadva1ms532 KiB
59Elfogadva1ms508 KiB
60Elfogadva1ms508 KiB
61Elfogadva1ms316 KiB
62Hibás válasz1ms316 KiB
63Elfogadva1ms316 KiB
64Elfogadva1ms316 KiB
65Elfogadva1ms544 KiB
66Elfogadva1ms316 KiB
subtask50/15
67Elfogadva1ms320 KiB
68Elfogadva1ms500 KiB
69Elfogadva1ms316 KiB
70Hibás válasz1ms508 KiB
71Hibás válasz4ms820 KiB
72Hibás válasz2ms564 KiB
73Hibás válasz6ms1332 KiB
74Hibás válasz4ms1408 KiB
75Elfogadva1ms316 KiB
76Hibás válasz9ms2440 KiB
77Hibás válasz1ms316 KiB
78Hibás válasz1ms316 KiB
79Elfogadva1ms316 KiB
80Elfogadva1ms316 KiB
81Elfogadva1ms316 KiB
82Elfogadva1ms316 KiB
83Elfogadva1ms316 KiB
84Elfogadva1ms316 KiB
85Hibás válasz1ms316 KiB
86Hibás válasz1ms316 KiB
87Hibás válasz1ms316 KiB
88Hibás válasz2ms564 KiB
89Hibás válasz1ms568 KiB
90Hibás válasz2ms564 KiB
91Hibás válasz2ms516 KiB
92Hibás válasz2ms564 KiB
93Hibás válasz3ms568 KiB
94Hibás válasz14ms1772 KiB
95Hibás válasz3ms612 KiB
96Hibás válasz16ms1984 KiB
97Hibás válasz9ms1592 KiB
98Hibás válasz17ms2412 KiB
99Hibás válasz7ms2360 KiB
100Hibás válasz1ms508 KiB
101Elfogadva1ms316 KiB
102Hibás válasz1ms316 KiB
103Hibás válasz1ms316 KiB
104Hibás válasz1ms320 KiB
105Hibás válasz1ms316 KiB
106Hibás válasz1ms500 KiB
107Hibás válasz1ms320 KiB
108Hibás válasz1ms316 KiB
109Hibás válasz1ms508 KiB
110Hibás válasz1ms316 KiB
111Hibás válasz1ms508 KiB
112Hibás válasz1ms376 KiB
113Hibás válasz1ms316 KiB
114Hibás válasz1ms316 KiB
115Elfogadva1ms316 KiB
116Elfogadva1ms316 KiB
117Elfogadva1ms508 KiB
118Hibás válasz1ms316 KiB
119Elfogadva1ms316 KiB
120Elfogadva1ms316 KiB
121Elfogadva1ms316 KiB
122Elfogadva1ms508 KiB
123Elfogadva1ms532 KiB
124Elfogadva1ms508 KiB
125Elfogadva1ms508 KiB
126Elfogadva1ms316 KiB
127Hibás válasz1ms316 KiB
128Elfogadva1ms316 KiB
129Elfogadva1ms316 KiB
130Elfogadva1ms544 KiB
131Elfogadva1ms316 KiB
132Hibás válasz3ms760 KiB
133Hibás válasz2ms480 KiB
134Hibás válasz3ms564 KiB
135Hibás válasz2ms316 KiB
136Hibás válasz2ms508 KiB
137Hibás válasz2ms556 KiB
138Hibás válasz2ms316 KiB
139Hibás válasz2ms564 KiB
140Hibás válasz4ms1048 KiB
141Hibás válasz2ms564 KiB
142Hibás válasz6ms1332 KiB
143Elfogadva7ms1444 KiB
144Hibás válasz8ms1844 KiB
145Hibás válasz6ms1352 KiB
146Hibás válasz13ms3188 KiB
147Elfogadva12ms2636 KiB
148Elfogadva10ms1844 KiB
149Elfogadva7ms1260 KiB