This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define INF 9223372036854775807
vector<vector<int>> adj2[100];
set<int> adj[100];
int ans[100];
bool v[100];
bool cyc(int x) {
if(v[x]) return true;
v[x] = 1;
for(int i : adj[x]) {
bool f = cyc(i);
//~ cout << "a " << x << " " << i << " " << f << endl;
if(f) return true;
}
v[x] = 0;
return false;
}
int dp(int x) {
if(x == 0 || x == 1) return 1;
if(ans[x] != -1) return ans[x];
ans[x] = INF;
for(vector<int> v : adj2[x]) {
int tmp = 0;
for(int i : v) {
tmp += dp(i);
}
ans[x] = min(ans[x], tmp);
}
return ans[x];
}
int32_t main() {
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int g, n, m, x, y, a;
cin >> g >> n >> m;
for(int i = 0; i < n; i++) {
cin >> x >> a;
vector<int> tmp;
for(int j = 0; j < a; j++) {
cin >> y;
adj[x].insert(y);
tmp.push_back(y);
}
adj2[x].push_back(tmp);
}
memset(ans, -1, sizeof(ans));
for(int i = 0; i < g; i++) {
memset(v, 0, sizeof(v));
if(cyc(i)) ans[i] = -2;
}
for(int i = 2; i < g; i++) {
if(dp(i) == -2) cout << "YES\n";
else cout << "NO " << dp(i) << '\n';
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |