zoukankan      html  css  js  c++  java
  • CSA Round #56

    C.Find Path Union

    题意

    给一颗n个节点数,给出每个节点所连接的点,以及连接的顺序,问能不能找到一种合适的连接方案使得若有节点的连接顺序都满足


    分析

    其实就是模拟题, 构造取的这个过程,每次取的时候, 考虑取得这个点,顺序是否满足,用一个队列模拟这个一个一个取的过程,若最后都按照满足的顺序取完则可以,反之则无解


    #include <bits/stdc++.h>
    
    using namespace std;
    
    int main(int argc, char *argv[]) {
      cin.sync_with_stdio(false);
      int n;
      cin >> n;
      vector<pair<int, int>> vec;
      vector<vector<int>> g(n + 1);
      set<pair<int, int>> se;
      for (int u = 1; u <= n; u++) {
        int l;
        cin >> l;
        while (l--) {
          int v;
          cin >> v;
          g[u].push_back(v);
        }
        reverse(g[u].begin(), g[u].end());
      }
      queue<int> q;
      for (int i = 1; i <= n; i++) {
        q.push(i);
      }
      while (!q.empty()) {
        int u = q.front();
        q.pop();
        if (!g[u].empty()) {
          int v = g[u].back();
          if (v == u || g[v].empty() || g[v].back() != u || se.count({u, v})) {
            continue;
          }
          g[v].pop_back();
          g[u].pop_back();
          se.insert({u, v});
          vec.push_back({u, v});
          q.push(u);
          q.push(v);
        }
      }
      for (int i = 1; i <= n; i++) {
        if (!g[i].empty()) {
          cout << -1 << endl;
          return 0;
        }
      }
      for (auto e : vec) {
        cout << e.first << " " << e.second << endl;
      }
      return 0;
    }
    View Code

     

    要么优秀要么生锈
  • 相关阅读:
    5. 详解创建Vue实例传入的options【暂时3个】
    编程的小知识点:
    4. Vue的 MVVM模式
    3. Vue做一个计数器 --新属性:methods、新的指令:@click
    8. Spring 注解开发(原始注解)
    2. 第一个Vue程序
    1.VUE 的安装
    【洛谷 3388】割点
    【洛谷 1063】能量项链
    三堆石子
  • 原文地址:https://www.cnblogs.com/Superwalker/p/7852507.html
Copyright © 2011-2022 走看看