제출 #272682

#제출 시각아이디문제언어결과실행 시간메모리
272682eohomegrownappsRestore Array (RMI19_restore)C++14
20 / 100
1092 ms1024 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; int n,m; int INF = 1e9; void relaxedges(){ vector<vector<pair<int,int>>> adjlist(n+1); //node,val for (int i = 0; i<m; i++){ int l,r,k,v; cin>>l>>r>>k>>v; r++; if (v==0){ //a[i]=l; //b[i]=r; //c[i]=k-(r-l); adjlist[r].push_back({l,r-l-k}); } else { //a[i]=r; //b[i]=l; //c[i]=(r-l)-k+1; adjlist[l].push_back({r,k-1-(r-l)}); } } for (int i = 0; i<n; i++){ //a[m+2*i]=i; //b[m+2*i]=i+1; //c[m+2*i]=-1; adjlist[i+1].push_back({i,1}); //a[m+2*i+1]=i+1; //b[m+2*i+1]=i; //c[m+2*i+1]=0; adjlist[i].push_back({i+1,0}); } m+=2*n; bool works = true; vector<int> distances(n+1,INF); distances[0]=0; vector<int> numpaths(n+1,0); vector<bool> inqueue(n+1,false); queue<int> q; q.push(0); while (q.size()>0&&works){ int f = q.front(); q.pop(); inqueue[f]=false; for (auto p : adjlist[f]){ if (distances[p.first]>distances[f]+p.second){ distances[p.first]=distances[f]+p.second; numpaths[p.first]=numpaths[f]+1; if (numpaths[p.first]>=n+1){ works=false; break; } if (!inqueue[p.first]){ q.push(p.first); inqueue[p.first]=true; } } } } if (!works){ cout<<-1<<'\n'; return; } /*for (int i = 0; i<=n; i++){ cout<<distances[i]<<' '; }cout<<'\n';*/ for (int i = 0; i<n; i++){ cout<<-(distances[i+1]-distances[i])<<' '; }cout<<'\n'; } int main(){ cin.tie(0); ios_base::sync_with_stdio(0); cin>>n>>m; /*if (n<=18){ subtask1(); } else {*/ relaxedges(); //} }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...