QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#439503#2679. 校园旅行hos_lyric100 ✓732ms24616kbC++143.6kb2024-06-12 04:54:422024-06-12 04:54:43

Judging History

你现在查看的是最新测评结果

  • [2024-06-12 04:54:43]
  • 评测
  • 测评结果:100
  • 用时:732ms
  • 内存:24616kb
  • [2024-06-12 04:54:42]
  • 提交

answer

#include <cassert>
#include <cmath>
#include <cstdint>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <bitset>
#include <complex>
#include <deque>
#include <functional>
#include <iostream>
#include <limits>
#include <map>
#include <numeric>
#include <queue>
#include <random>
#include <set>
#include <sstream>
#include <string>
#include <unordered_map>
#include <unordered_set>
#include <utility>
#include <vector>

using namespace std;

using Int = long long;

template <class T1, class T2> ostream &operator<<(ostream &os, const pair<T1, T2> &a) { return os << "(" << a.first << ", " << a.second << ")"; };
template <class T> ostream &operator<<(ostream &os, const vector<T> &as) { const int sz = as.size(); os << "["; for (int i = 0; i < sz; ++i) { if (i >= 256) { os << ", ..."; break; } if (i > 0) { os << ", "; } os << as[i]; } return os << "]"; }
template <class T> void pv(T a, T b) { for (T i = a; i != b; ++i) cerr << *i << " "; cerr << endl; }
template <class T> bool chmin(T &t, const T &f) { if (t > f) { t = f; return true; } return false; }
template <class T> bool chmax(T &t, const T &f) { if (t < f) { t = f; return true; } return false; }
#define COLOR(s) ("\x1b[" s "m")


// error in statement
#define MAX_N 5010

int N, M, Q;
char C[5010];
vector<int> A, B;
vector<int> X, Y;

vector<vector<int>> graph[2];
void ae(int id, int u, int v) {
  graph[id][u].push_back(v);
  graph[id][v].push_back(u);
}

vector<int> dep;
pair<int, int> bac;
void dfs(int dc, int u, int d) {
  dep[u] = d;
  for (const int v : graph[0][u]) if (((C[u] - '0') ^ dc) == (C[v] - '0')) {
    if (~dep[v]) {
      if ((dep[v] - dep[u]) % 2 == 0) {
        bac = make_pair(u, v);
      }
    } else {
      ae(1, u, v);
      dfs(dc, v, d + 1);
    }
  }
}

bitset<5010> vis[2][5010];

int main() {
  for (; ~scanf("%d%d%d", &N, &M, &Q); ) {
    scanf("%s", C);
    A.resize(M);
    B.resize(M);
    for (int i = 0; i < M; ++i) {
      scanf("%d%d", &A[i], &B[i]);
      --A[i];
      --B[i];
    }
    X.resize(Q);
    Y.resize(Q);
    for (int q = 0; q < Q; ++q) {
      scanf("%d%d", &X[q], &Y[q]);
      --X[q];
      --Y[q];
    }
    
    graph[0].assign(N, {});
    for (int i = 0; i < M; ++i) {
      ae(0, A[i], B[i]);
    }
    graph[1].assign(N, {});
    for (int dc = 0; dc < 2; ++dc) {
      dep.assign(N, -1);
      for (int u = 0; u < N; ++u) if (!~dep[u]) {
        bac = make_pair(-1, -1);
        dfs(dc, u, 0);
        if (~bac.first) {
          ae(1, bac.first, bac.second);
        }
      }
    }
cerr<<"graph[1] = "<<graph[1]<<endl;
    
    /*
      (0, u, v): palindrome
      -> (1, v', u)
      -> (0, u', v')
    */
    for (int h = 0; h < 2; ++h) for (int u = 0; u < N; ++u) vis[h][u].reset();
    
    queue<int> que;
    auto visit = [&](int h, int u, int v) -> void {
// cerr<<"visit "<<h<<" "<<u<<" "<<v<<endl;
      if (!vis[h][u][v]) {
        vis[h][u].set(v);
        que.push((h * N + u) * N + v);
      }
    };
    for (int u = 0; u < N; ++u) {
      visit(0, u, u);
    }
    for (int u = 0; u < N; ++u) for (const int v : graph[1][u]) if (C[u] == C[v]) {
      visit(0, u, v);
    }
    for (; que.size(); ) {
      const int h = que.front() / N / N;
      const int u = que.front() / N % N;
      const int v = que.front() % N;
      que.pop();
      for (const int w : graph[1][v]) if (h == 0 || C[u] == C[w]) {
        visit(h ^ 1, w, u);
      }
    }
    
    for (int q = 0; q < Q; ++q) {
      puts(vis[0][X[q]][Y[q]] ? "YES" : "NO");
    }
#ifdef LOCAL
cerr<<string(80,'=')<<endl;
#endif
  }
  return 0;
}

详细

Test #1:

score: 10
Accepted
time: 504ms
memory: 24616kb

input:

3000 10000 100000
110000100010110011101010100100001001000101110111011011101111111001100001011010101011001010100001011111001010100011101100101111110001011100000011000010101101010110110111001011110100100011000110101011000110110000011010101100000101111011010001110010011100010111110100010000011001001101...

output:

YES
YES
YES
YES
YES
YES
YES
YES
YES
NO
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
NO
YES
YES
YES
YES
YES
YES
NO
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES...

result:

ok 100000 lines

Test #2:

score: 10
Accepted
time: 236ms
memory: 8700kb

input:

3000 9265 100000
0111101100111000110010101001111100011111111011000111101101010000011110010100011011000011100001111011010001010110100011001111011010101111011101101101111010001110101010000000111110011000101110111011001101000010111101011011000110101010001110011111101100111011010001101110011000001010001...

output:

NO
YES
YES
YES
NO
YES
YES
YES
YES
YES
YES
NO
YES
YES
YES
YES
YES
YES
YES
YES
NO
NO
YES
YES
YES
YES
YES
YES
NO
YES
NO
YES
YES
YES
YES
YES
YES
YES
NO
NO
YES
YES
YES
YES
YES
NO
YES
YES
NO
YES
YES
YES
NO
YES
YES
YES
YES
YES
NO
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
NO
YES
NO
YES
YES
YES
NO
YES
YES
NO
Y...

result:

ok 100000 lines

Test #3:

score: 10
Accepted
time: 233ms
memory: 8508kb

input:

3000 10000 100000
111101111111010000110001010110001111111011000110100101100000111110000110011010010001100110110011100010011100011001000111110100101011010001100010011010100001011101001000110000110111000100111010010001111111011100111000011110110111011111100111100101011110011111111001100011100100111111...

output:

NO
YES
YES
YES
YES
YES
YES
YES
NO
YES
NO
NO
YES
NO
YES
YES
NO
YES
YES
YES
YES
NO
NO
YES
NO
YES
YES
YES
YES
NO
NO
NO
YES
NO
YES
YES
NO
YES
YES
YES
NO
YES
YES
YES
YES
NO
NO
YES
YES
YES
NO
YES
YES
YES
YES
YES
NO
NO
NO
YES
YES
YES
NO
YES
NO
YES
NO
YES
NO
YES
NO
NO
NO
YES
YES
YES
NO
NO
YES
NO
YES
YES
YES...

result:

ok 100000 lines

Test #4:

score: 10
Accepted
time: 107ms
memory: 9852kb

input:

3000 50000 100000
010100100001111000100101000001011111100010100010101010100110100010110010110000011010100001001110000101100000001101100010001001011001110010101011011011011000101111111100011010000001110100001001010111011111011001100011111000011000011101001100010111000111010001100010100111110010001011...

output:

NO
NO
NO
NO
NO
YES
YES
NO
YES
NO
NO
NO
NO
NO
NO
NO
NO
NO
NO
NO
NO
NO
NO
NO
NO
NO
NO
YES
NO
NO
NO
YES
NO
NO
NO
NO
NO
NO
NO
NO
NO
NO
NO
NO
NO
NO
NO
YES
NO
NO
NO
NO
YES
NO
NO
NO
NO
YES
NO
NO
NO
NO
NO
NO
NO
YES
NO
NO
NO
NO
YES
NO
NO
NO
NO
YES
NO
NO
NO
NO
YES
NO
NO
YES
YES
NO
NO
YES
NO
NO
NO
NO
NO
NO
NO
...

result:

ok 100000 lines

Test #5:

score: 10
Accepted
time: 190ms
memory: 9912kb

input:

3000 50000 100000
001000000001001110011111011010101001000101110110000110011100101010010011101000110010111010001010110001011000111100111101100000111000101111011010000101101111110010000111011100100001111000000001111110000110100011100010110111100101000110111011000001111100000111101000001101001110101010...

output:

YES
YES
NO
NO
NO
YES
YES
YES
YES
NO
NO
NO
YES
NO
NO
NO
NO
NO
NO
YES
YES
YES
YES
NO
NO
YES
NO
NO
YES
NO
NO
NO
YES
YES
NO
YES
YES
YES
NO
NO
NO
YES
YES
NO
YES
NO
NO
NO
YES
YES
NO
YES
YES
YES
NO
YES
YES
YES
NO
YES
YES
YES
YES
YES
NO
NO
YES
NO
YES
YES
YES
YES
NO
YES
NO
YES
YES
YES
YES
YES
NO
NO
YES
YES
N...

result:

ok 100000 lines

Test #6:

score: 10
Accepted
time: 214ms
memory: 9472kb

input:

3000 50000 100000
110011011010100101101101100111100110011110101011111001101011110110101010101110000111111001000001100011100011001100010011011101101011010000100101000110110111001111111001111011001110101110001110110100010000111100000101101111000001111010011101100111111110010001011011101001011110100111...

output:

YES
YES
YES
YES
NO
YES
YES
NO
YES
YES
YES
YES
YES
NO
YES
YES
YES
YES
NO
YES
NO
YES
NO
YES
YES
NO
NO
NO
NO
YES
NO
YES
NO
YES
NO
YES
NO
YES
NO
NO
NO
YES
YES
NO
YES
YES
NO
NO
YES
NO
YES
NO
YES
YES
YES
NO
YES
YES
YES
NO
NO
YES
YES
NO
YES
NO
YES
YES
NO
NO
NO
NO
NO
NO
YES
NO
YES
NO
YES
YES
NO
YES
YES
YES
...

result:

ok 100000 lines

Test #7:

score: 10
Accepted
time: 246ms
memory: 9632kb

input:

3000 50000 100000
111011101011110010111011011110110011101010100000101111100100011001000010110001010000101111010110110000110111100011110101000100001100100100011011100010010010101111100010000010011101001101000001111011001011101001101111100001100001101100100110011010001101111101100111001010111100100011...

output:

NO
YES
YES
YES
NO
YES
NO
YES
NO
YES
YES
NO
YES
YES
NO
YES
NO
YES
YES
YES
NO
YES
YES
YES
YES
YES
NO
NO
NO
NO
YES
YES
YES
YES
YES
YES
NO
NO
YES
YES
YES
YES
YES
YES
NO
NO
YES
YES
YES
NO
YES
YES
YES
NO
YES
YES
YES
YES
NO
YES
YES
YES
NO
YES
NO
YES
NO
YES
NO
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES...

result:

ok 100000 lines

Test #8:

score: 10
Accepted
time: 732ms
memory: 18852kb

input:

5000 361135 100000
00000011101011100011110101101001100110010001101001100101101001111010101110111010111100110000010110011100100100011100101010011011000011111010110111011010100001010011001110001111010001110010000000100110101111000110111001111011110111100000110011101101000110001111001101000111010011111...

output:

YES
NO
NO
YES
NO
YES
YES
YES
YES
NO
YES
YES
YES
YES
YES
NO
YES
YES
YES
YES
YES
YES
YES
YES
YES
NO
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
NO
YES
YES
NO
YES
YES
YES
YES
YES
NO
NO
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
NO
YES
YES
YES
YES
NO
YES
...

result:

ok 100000 lines

Test #9:

score: 10
Accepted
time: 724ms
memory: 21736kb

input:

5000 500000 100000
10101100011011001010110100000010100001110111001010100100100100000010010001001011001110001010110000000010110011010101010101001011110111001001100001001011011001001010110101111001101111110010001101010010101001101100110100001010000110001100011001001110110110100100100101111101000001111...

output:

NO
NO
NO
YES
NO
YES
NO
YES
YES
YES
YES
NO
YES
YES
YES
YES
NO
NO
YES
YES
YES
YES
YES
NO
YES
NO
YES
YES
NO
YES
YES
NO
YES
NO
YES
YES
YES
NO
NO
YES
YES
NO
YES
NO
NO
YES
YES
YES
YES
NO
NO
NO
NO
NO
YES
NO
YES
NO
NO
NO
YES
YES
YES
YES
YES
YES
YES
NO
NO
YES
YES
NO
YES
YES
NO
NO
YES
NO
YES
NO
NO
YES
NO
NO
Y...

result:

ok 100000 lines

Test #10:

score: 10
Accepted
time: 708ms
memory: 21608kb

input:

5000 500000 100000
11011101110101000011000010101011101000000011001111101011111001010111000101110000011100100101011001011011011001011111011101000111010101100000000110001010011000010101010100000101101001100101010001111011001100111001001001011000001000100111011110101011011100010011100001101000001010110...

output:

NO
YES
YES
YES
NO
NO
NO
YES
YES
NO
NO
NO
NO
YES
YES
NO
YES
YES
YES
YES
NO
YES
YES
YES
YES
YES
NO
YES
YES
NO
YES
YES
YES
YES
YES
YES
NO
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
NO
YES
YES
NO
NO
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
NO
YES
NO
YES
YES
NO
NO
YES
NO
NO
YES
YES
YES
YES
YES
NO...

result:

ok 100000 lines