URAL 1741 Communication Fiend dp
#include <cstdio>
#include <algorithm>
#include <cstring>
typedef long long ll;
const ll Inf = (ll)(1e15);
const int N = 10000 + 10;
const int E = 10000 + 10;
struct Edge {
int v, cos, f, nex;
Edge() {
}
Edge(int _v, int _cos, int _f, int _nex) {
v = _v;
cos = _cos;
f = _f;
nex = _nex;
}
};
int g[N], idx;
Edge eg[E];
ll d[N][2];
int n, m;
void addedge(int u, int v, int len, int f) {
eg[idx] = Edge(v, len, f, g[u]);
g[u] = idx++;
}
ll dp(int dep, int fl) {
if (d[dep][fl] >= 0)
return d[dep][fl];
d[dep][fl] = Inf;
int to;
for (int i = g[dep]; ~i; i = eg[i].nex) {
to = eg[i].v;
if (eg[i].f == 0) {
d[dep][fl] = std::min(d[dep][fl], dp(to, 1) + eg[i].cos);
} else if (eg[i].f == 1) {
if (fl)
continue;
d[dep][fl] = std::min(d[dep][fl], dp(to, 0) + eg[i].cos);
d[dep][fl] = std::min(d[dep][fl], dp(to, 1) + eg[i].cos);
} else if (eg[i].f == 2) {
d[dep][fl] = std::min(d[dep][fl], dp(to, fl) + eg[i].cos);
}
}
return d[dep][fl];
}
void work() {
int u, v, cos;
char s[15];
ll ans;
idx = 0;
memset(g, -1, sizeof g);
while (m -- > 0) {
scanf("%d%d%d%s", &u, &v, &cos, s);
if (*s == 'L') {
addedge(v, u, cos, 0);
} else if (*s == 'P') {
addedge(v, u, cos, 1);
} else {
addedge(v, u, cos, 2);
}
}
memset(d, -1, sizeof d);
d[1][1] = 0;
ans = std::min(dp(n, 1), dp(n, 0));
if (ans == Inf)
puts("Offline");
else {
puts("Online");
printf("%I64d
", ans);
}
}
int main() {
while (~scanf("%d%d", &n, &m))
work();
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.