이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<bits/stdc++.h>
#define ll long long
#define pii pair<int,int>
using namespace std;
const int mxn=5e4+5;
const ll inf=1e15;
vector<int> adj[mxn];
vector<int> tps[mxn];
int l[5 * mxn],r[5 * mxn],w[5 * mxn];
int k,m,n;
ll d[mxn][6][6];
ll res[mxn];
struct query {
int a,b;
int ind;
query(int x,int y,int z) : a(x),b(y),ind(z) {};
};
void solve(int b, int e, vector<query> q) {
if(q.size() == 0) return;
if(b == e) {
for(auto i : q) res[i.ind] = -1;
return;
}
int mid = b + e >> 1;
for(int i = 0; i < k; i++) {
for(int j = 0; j < k; j++) {
d[mid][i][j] = i == j ? 0 : inf;
}
}
for(int i = mid - 1; i >= b; i--) {
for(int j = 0; j < k; j++) {
for(int x = 0; x < k; x++) d[i][j][x] = inf;
int u = i * k + j;
for(int z : adj[u]) {
int v = r[z];
for(int x = 0; x < k; x++) {
d[i][j][x] = min(d[i][j][x], d[i+1][v%k][x] + w[z]);
}
}
}
}
for(int i = mid + 1; i <= e; i++) {
for(int j = 0; j < k; j++) {
for(int x = 0; x < k; x++) d[i][j][x] = inf;
int u = i * k + j;
for(int z : tps[u]) {
int v = l[z];
for(int x = 0; x < k; x++) {
d[i][j][x] = min(d[i][j][x], d[i-1][v%k][x] + w[z]);
}
}
}
}
vector<query> tm[2];
for(auto i : q) {
int x = i.a / k;
int y = i.b / k;
if(x<=mid && y >= mid) {
ll ans = inf;
for(int j = 0; j < k; j++) {
ans = min(ans,d[x][i.a % k][j]+d[y][i.b % k][j]);
}
res[i.ind] = ans >= inf ? -1 : ans;
continue;
}
tm[x > mid].push_back(i);
}
solve(b,mid,tm[0]);
solve(mid+1,e,tm[1]);
}
int main() {
int o;
cin>>k>>n>>m>>o;
for(int i = 1; i <= m; i++) {
cin>>l[i]>>r[i]>>w[i];
adj[l[i]].push_back(i);
tps[r[i]].push_back(i);
}
vector<query> qs;
for(int i = 1; i <= o; i++) {
int a,b;
cin>>a>>b;
qs.push_back(query(a,b,i));
}
solve(0,(n + k - 1) / k,qs);
for(int i = 1; i <= o; i++) {
cout<<res[i]<<endl;
}
}
컴파일 시 표준 에러 (stderr) 메시지
toll.cpp: In function 'void solve(int, int, std::vector<query>)':
toll.cpp:25:14: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
25 | int mid = b + e >> 1;
| ~~^~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |