WA on #2 #4 #9
#include<bits/stdc++.h>
#define int long long
#define endl "\n"
using namespace std;
int h[114514], d[114514];
int p[114][514];
int f[114514];
int cnt, n, m;
int dd[114514];
bool vis[114514];
priority_queue<int, vector<int>, greater<int> >q;
struct node {
int to, next;
} e[1145141];
void add(int x, int y) {
e[++cnt].to = y;
e[cnt].next = h[x];
h[x] = cnt;
}
signed main() {
cin >> n >> m;
for (int i = 1; i <= 114514; i++) {
h[i] = -1;
f[i] = -2e9;
}
for (int i = 1; i <= m; i++) {
int x, y, v;
cin >> x >> y >> v;
d[y]++;
dd[x]++;
p[x][y] = v;
add(x, y);
}
for (int i = 1; i <= 100; i++) {
if (d[i] == 0) {
f[i] = 0;
q.push(i);
}
}
while (!q.empty()) {
int u = q.top();
q.pop();
for (int i = h[u]; i != -1; i = e[i].next) {
f[e[i].to] = max(f[e[i].to], f[u] + p[u][e[i].to]);
if (--d[e[i].to] == 0) {
q.push(e[i].to);
}
}
}
int maxn = -2e9;
for (int i = 1; i <= 100; i++) {
if (dd[i] == 0 && f[i] > maxn) {
maxn = f[i];
}
}
cout << maxn << endl;
queue<int> q1;
for (int i = 1; i <= 100; i++) {
if (dd[i] == 0 && f[i] == maxn) {
vis[i] = 1;
q1.push(i);
}
}
while (!q1.empty()) {
int u = q1.front();
q1.pop();
for (int v = 1; v <= 100; v++) {
if (p[v][u] != 0) {
if (f[u] == f[v] + p[v][u]) {
if (!vis[v]) {
vis[v] = 1;
q1.push(v);
}
}
}
}
}
vector<int> ans;
for (int i = 1; i <= 100; i++) {
if (vis[i]) {
ans.push_back(i);
}
}
sort(ans.begin(), ans.end());
for (int i = 0; i < ans.size(); i++) {
cout << ans[i] << " ";
}
return 0;
}