제출 #1356429

#제출 시각아이디문제언어결과실행 시간메모리
1356429gkos5678Ili (COI17_ili)C++20
0 / 100
1 ms344 KiB
#include <bits/stdc++.h>
using namespace std;

#define pb push_back

typedef vector<int> vi;

const int maxn = 1e4 + 7;

int n, m, s1[maxn], s2[maxn];
bool isk0[2 * maxn], vis[2 * maxn], in[maxn][2 * maxn];
string c;
vi ts;

void dfs(int v){
    if (isk0[v]) return;
    isk0[v] = 1;
    if (v <= n) return;
    dfs(s1[v - n]);
    dfs(s2[v - n]);
}

void dfs2(int v){
    if (v <= n) return;
    if (vis[v]) return;
    vis[v] = 1;
    dfs2(s1[v - n]);
    dfs2(s2[v - n]);
    ts.pb(v);
}

void dfs3(int v, int pc){
    if (vis[v]) return;
    vis[v] = 1;
    if (v <= n){
        in[pc][v] = 1;
        return;
    }
    dfs3(s1[v - n], pc);
    dfs3(s2[v - n], pc);
}

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);

    cin >> n >> m >> c;
    c = "." + c;
    for (int i = 1; i <= m; i++){
        char c1, c2;
        int x1, x2;
        cin >> c1 >> x1 >> c2 >> x2;
        x1 += (c1 == 'c') * n;
        x2 += (c2 == 'c') * n;
        s1[i] = x1, s2[i] = x2;
    }

    for (int i = 1; i <= m; i++)
        dfs2(i + n);
    for (int i = 1; i <= m; i++){
        for (int j = 1; j <= n + m; j++)
            vis[j] = 0;
        dfs3(i + n, i);
    }
    for (int i = 1; i <= m; i++)
        if (c[i] == '0') dfs(i + n);
    for (int i = 1; i <= m; i++)
        if (isk0[i + n]) c[i] = '0';
    for (int i = 1; i <= m; i++){
        if (isk0[s1[i]])
            s1[i] = 0;
        if (isk0[s2[i]])
            s2[i] = 0;
    }
    for (int i = 1; i <= m; i++)
        in[i][0] = 1, in[i][i + n] = 1;
    for (int i = 0; i < m; i++){
        int v = ts[i];
        for (int j = 1; j <= m; j++)
            if (in[j][s1[v - n]] && in[j][s2[v - n]])
                in[j][v] = 1;
    }
    for (int i = 1; i <= m; i++)
        for (int j = 1; j <= m; j++)
            if (c[j] == '1' && in[i][j + n])
                c[i] = '1';

    for (int i = 1; i <= m; i++)
        cout << c[i];
    cout << "\n";
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...