1 条题解

  • 0
    @ 2025-9-10 9:00:40

    C++ :

    #include <memory.h>
    #include <iostream>
    #include <map>
    #include <set>
    #include <string>
    #include <vector>
    using namespace std;
    
    vector<pair<int, bool> > implications[30][2];  // T = w, F = h
    int val[30], val2[30];
    
    bool doit(int n, int v) {
      if (val[n] != -1) return val[n] == v;
      val[n] = v;
      vector<pair<int, bool> >& imp = implications[n][v];
      for (int i = 0; i < imp.size(); i++)
        if (!doit(imp[i].first, imp[i].second)) return false;
      return true;
    }
    
    main() {
      int N, M;
      while (cin >> N >> M && N) {
        for (int i = 0; i < N; i++)
        for (int j = 0; j < 2; j++)
          implications[i][j].clear();
        for (int i = 0; i < M; i++) {
          char a, b;
          int an, bn;
          cin >> an >> a >> bn >> b;
          implications[an][a=='h'].push_back(make_pair(bn, b=='w'));
          implications[bn][b=='h'].push_back(make_pair(an, a=='w'));
        }
        memset(val, -1, sizeof(val));
        if (!doit(0, 1)) goto fail;
        for (int i = 0; i < N; i++) if (val[i] == -1) {
          memcpy(val2, val, sizeof(val));
          if (!doit(i, 0)) {
            memcpy(val, val2, sizeof(val));
            if (!doit(i, 1)) goto fail;
          }
        }
        for (int i = 1; i < N; i++) {
          if (i > 1) cout << ' ';
          cout << i << (val[i] ? 'w' : 'h');
        }
        cout << endl;
        continue;
    fail:
        cout << "bad luck" << endl;
      }
    }
    
    

    Python :

    # coding=utf-8
    
    
    • 1

    信息

    ID
    3645
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者