我的思路就是单独处理每个关系,至于没有关系的就把他看成一个关系,他的时间就是他本身所需的时间。对每个关系的完成时间取最大值。 wa 30pts
#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
#define TRACE 1
#define tcout TRACE && cout
#define fi first
#define se second
#define IN(o) insert(o)
#define int long long
#define fst ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
const int INF = 0x3f3f3f3f3f3f3f3f;
const int P = 998244353;
const int N = 1e6 + 10;
int n, m;
vector<int> G[N];
int in[N], a[N];
bool v[N];
queue<int> q;
signed main()
{
cin >> n >> m;
for(int i=1; i<=n; i++)
{
cin >> a[i];
}
for(int i=1; i<=m; i++)
{
int u, v;
cin >> u >> v;
G[u].push_back(v);
in[v]++;
}
int res = 0;
for(int i=1; i<=n; i++)
{
if(in[i] == 0 && v[i] == 0)
{
q.push(i);
int cnt = 0;
while(!q.empty())
{
int u = q.front();
v[u] = 1;
cnt += a[u];
q.pop();
for(auto v : G[u])
{
in[v]--;
if(in[v] == 0)
{
q.push(v);
}
}
}
res = max(cnt, res);
}
}
cout << res;
return 0;
}