D. Gifts by the List
链接:
http://codeforces.com/contest/681/problem/D
代码:
1 #include<iostream> 2 #include<vector> 3 using namespace std; 4 5 const int maxn = 1e6 + 7; 6 int a[maxn], d[maxn], flag; 7 vector<int> E[maxn]; 8 vector<int> ans; 9 10 void dfs(int x, int p) 11 { 12 for (int i = 0; i < E[x].size(); i++) 13 { 14 int u = E[x][i]; 15 if (u == p) continue; 16 if (a[u] != a[x] && a[u] != u) flag = 1; 17 dfs(u, x); 18 } 19 if (a[x] == x) ans.push_back(x); 20 } 21 22 int main() 23 { 24 int n, m; 25 cin >> n >> m; 26 for (int i = 1; i <= m; i++) { 27 int p, q; 28 cin >> p >> q; 29 E[p].push_back(q); 30 E[q].push_back(p); 31 d[q]++; 32 } 33 for (int i = 1; i <= n; i++) 34 cin >> a[i]; 35 for (int i = 1; i <= n; i++) 36 if (!d[i]) 37 dfs(i, 0); 38 if (flag) { 39 cout << -1 << endl; 40 return 0; 41 } 42 cout << ans.size() << endl; 43 for (int i = 0; i < ans.size(); i++) 44 cout << ans[i] << endl; 45 return 0; 46 }