제출 #1359672

#제출 시각아이디문제언어결과실행 시간메모리
1359672AvianshRestore Array (RMI19_restore)C++20
13 / 100
80 ms624 KiB
#include <bits/stdc++.h>

using namespace std;

signed main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    int n,m;
    cin >> n >> m;
    array<int,3>edges[m+n];
    for(int i = 0;i<m;i++){
        int l,r,k,v;
        cin >> l >> r >> k >> v;
        k--;
        l--;
        l++;
        r++;
        int len = r-l;
        //one based indexing, 0 is dummy node
        if(v){
            //len-(pref[r]-pref[l])<=k
            //pref[l]-pref[r]<=k-len
            edges[i][0]=r;
            edges[i][1]=l;
            edges[i][2]=k-len;
        }
        else{
            //len-(pref[r]-pref[l])-1>=k
            //pref[l]-pref[r]>=k-len+1
            //pref[r]-pref[l]<=len-k-1
            edges[i][0]=l;
            edges[i][1]=r;
            edges[i][2]=len-k-1;
        }
    }
    for(int i = 0;i<=n-1;i++){
        //pref[i+1]-pref[i]<=1
        edges[i+m][0]=i;
        edges[i+m][1]=i+1;
        edges[i+m][2]=1;
    }
    m=n+m;
    int pref[n+1];
    fill(pref,pref+n+1,1e9);
    pref[0]=0;
    for(int i = 0;i<=n;i++){
        for(int j = 0;j<m;j++){
            if(pref[edges[j][0]]==1e9)
                continue;
            pref[edges[j][1]]=min(pref[edges[j][1]],pref[edges[j][0]]+edges[j][2]);
        }
    }
    for(int j = 0;j<m;j++){
        if(pref[edges[j][0]]==1e9)
            continue;
        int oval = pref[edges[j][1]];
        pref[edges[j][1]]=min(pref[edges[j][1]],pref[edges[j][0]]+edges[j][2]);
        if(oval!=pref[edges[j][1]]){
            cout << -1 << "\n";
            return 0;
        }
    }
    for(int i = 1;i<=n;i++){
        if(pref[i]-pref[i-1]==1||pref[i]==pref[i-1]){
            continue;
        }
        cout << -1;
        return 0;
    }
    ///no 0 cycle
    for(int i = 1;i<=n;i++){
        if(pref[i]==pref[i-1]){
            cout << 0 << " ";
        }
        else{
            cout << 1 << " ";
        }
    }
    return 0;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…