Submission #1300892

#TimeUsernameProblemLanguageResultExecution timeMemory
1300892NewtonabcRestore Array (RMI19_restore)C++20
100 / 100
437 ms1000 KiB
#include<bits/stdc++.h>
#define tpp tuple<int,int,int,int>
#define ll long long
using namespace std;
const ll MOD=1e9+7;
const int N=5e5+10;
int d[N];
//d[i] keeps number 0 from 1 to i
//cal(l,r) is d[r+1]-d[l]
vector<tuple<int,int,int>> edge;
void solve(){
    int n,m;
    cin>>n >>m;
    for(int i=0;i<m;i++){
        int l,r,w,t;
        cin>>l >>r >>w >>t;
        if(t==0) edge.push_back({r+1,l,-w});
        else edge.push_back({l,r+1,w-1});
    }
    for(int i=0;i<n;i++) edge.push_back({i,i+1,1}),edge.push_back({i+1,i,0});
    d[0]=0;
    for(int i=1;i<=n;i++) d[i]=INT_MAX;
    bool st;
    //n+1 node
    for(int i=0;i<n+1;i++){
        st=0;
        for(auto [u,v,w]:edge){
            if(d[u]==INT_MAX) continue;
            if(d[u]+w<d[v]){
                d[v]=d[u]+w;
                st=1;
            }
        }
    }
    // for(int i=0;i<=n;i++) cout<<d[i] <<" ";
    // cout<<"\n";
    if(st==1){
        cout<<-1;
        return;
    }
    for(int i=0;i<n;i++){
        if(d[i+1]-d[i]==1) cout<<0 <<" ";
        else cout<<1 <<" ";
    }
}
int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    int t=1;
    //cin>>t;
    while(t--){
        solve();
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...