• CF-1144F-Graph Without Long Directed Paths


    题意:

    给出一个无向联通图,要求你给出每条边的方向,使得无论从哪个点出发最多只能走一条边;

    思路:

    对于每个点,要么出度为0,要么入度为0即可。所以这就是一个判断二分图。

    • 二分图
      #include "cstdio"
      #include "cstring"
      #include "iostream"
      #include "vector" 
      using namespace std;
      typedef pair<int, int> PII;
      const int MAXN = 2e5 + 5;
      int n, m;
      PII edge[MAXN];
      // v[i]记录和i点相连的点 
      vector<int> v[MAXN];
      // 记录每个点的状态,-1表示未访问,0表示只有出度,1表示只有入度 
      int arr[MAXN];
      bool ok = true;
      void dfs(int n, int k) {
          if (arr[n] != -1) {
              if (arr[n] != k) {
                  ok = false;
              }
              return;
          }
          arr[n] = k;
          for (int i = 0; i < v[n].size(); i++) {
              dfs(v[n][i], !k);
          }
      }
      int main() {
          int a, b;
          memset(arr, -1, sizeof(arr));
          scanf("%d%d", &n, &m);
          for (int i = 1; i <= m; i++) {
              scanf("%d%d", &a, &b);
              // 存边,但是其实后面不用b了,存下a点就够了 
              edge[i] = make_pair(a, b);
              v[a].push_back(b);
              v[b].push_back(a);
          }
          dfs(1, 1);
          if (ok) {
              puts("YES");
              for (int i = 1; i <= m; i++) {
                  printf("%d", arr[edge[i].first]);
              }
              puts("");
          } else {
              puts("NO");
          }
          return 0;
      }
  • 相关阅读:
    JQuery hover鼠标变换
    装饰者模式
    principle04
    Method Injection
    观察者模式
    Java SPI
    Redis--学习01
    OO设计中5大原则
    knowledge
    策略模式
  • 原文地址:https://www.cnblogs.com/Angel-Demon/p/10644381.html
Copyright © 2020-2023  润新知