• Codeforces Round #357 (Div. 2) D. Gifts by the List DFS


    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 }
  • 相关阅读:
    第3章 C++ I/O流技术
    第2章 C++模板技术
    第1章 C++编程技术
    第0章 目录
    判断鼠标移入移出方向设置
    获取数组最小值
    jquery里的宽度详解
    trigger,triggerhandler模拟事件
    表单验证 不能为负值或者字母
    arguments的用法
  • 原文地址:https://www.cnblogs.com/baocong/p/5918374.html
Copyright © 2020-2023  润新知