提出 #10530081
ソースコード 拡げる
#include <iostream>
#include <cmath>
#include <vector>
#include <queue>
template <class Cost = int>
struct Edge {
int src, dst;
Cost cost;
Edge(int src = -1, int dst = -1, Cost cost = 1)
: src(src), dst(dst), cost(cost){};
bool operator<(const Edge<Cost>& e) const { return this->cost < e.cost; }
bool operator>(const Edge<Cost>& e) const { return this->cost > e.cost; }
};
template <class Cost = int>
using Edges = std::vector<Edge<Cost>>;
template <class Cost = int>
using Graph = std::vector<std::vector<Edge<Cost>>>;
using lint = long long;
constexpr lint INF = 1LL << 50;
void solve() {
int n, m;
std::cin >> n >> m;
Edges<lint> edges(m);
Graph<lint> graph(n);
for (auto& e : edges) {
std::cin >> e.src >> e.dst >> e.cost;
--e.src, --e.dst;
graph[e.src].emplace_back(e.src, e.dst, e.cost);
graph[e.dst].emplace_back(e.dst, e.src, e.cost);
}
// BFSで割り当てをする関数
std::vector<lint> vs(n);
std::vector<int> cs(n);
auto paint = [&](lint w) {
std::fill(cs.begin(), cs.end(), -1);
vs[0] = w;
cs[0] = 0;
std::queue<int> que;
que.push(0);
while (!que.empty()) {
int v = que.front();
que.pop();
for (auto e : graph[v]) {
int u = e.dst;
if (cs[u] != -1) continue;
cs[u] = 1 - cs[v];
vs[u] = e.cost - vs[v];
que.push(u);
}
}
};
paint(0);
bool bip = true, ok = true;
for (auto e : edges) {
if (cs[e.src] == cs[e.dst]) bip = false;
if (vs[e.src] + vs[e.dst] != e.cost) ok = false;
}
if (bip) {
// 各色の最小値を求める
lint lmin = INF, rmin = INF;
for (int v = 0; v < n; ++v) {
if (cs[v] == 0) {
lmin = std::min(lmin, vs[v]);
} else {
rmin = std::min(rmin, vs[v]);
}
}
std::cout << (ok ? std::max(lmin + rmin - 1, 0LL) : 0) << std::endl;
} else {
// c(0)の候補を探す
lint w = 0;
for (auto e : edges) {
if (cs[e.src] == cs[e.dst]) {
w = std::abs(vs[e.src] + vs[e.dst] - e.cost);
break;
}
}
// 再度割り当てて判定
paint(w / 2);
ok = true;
for (int v = 0; v < n; ++v) {
if (vs[v] <= 0) ok = false;
}
for (auto e : edges) {
if (vs[e.src] + vs[e.dst] != e.cost) ok = false;
}
std::cout << ok << std::endl;
}
}
int main() {
std::cin.tie(nullptr);
std::cout.tie(nullptr);
std::ios::sync_with_stdio(false);
solve();
return 0;
}
提出情報
| 提出日時 | |
|---|---|
| 問題 | E - + Graph |
| ユーザ | Tiramister |
| 言語 | C++14 (GCC 5.4.1) |
| 得点 | 600 |
| コード長 | 2808 Byte |
| 結果 | AC |
| 実行時間 | 69 ms |
| メモリ | 10880 KiB |
ジャッジ結果
| セット名 | Sample | All | ||||
|---|---|---|---|---|---|---|
| 得点 / 配点 | 0 / 0 | 600 / 600 | ||||
| 結果 |
|
|
| セット名 | テストケース |
|---|---|
| Sample | sampleNo.txt, samplePath.txt, sampleTri.txt |
| All | OK_0.txt, OK_1.txt, OK_2.txt, OK_3.txt, OK_4.txt, close_0.txt, close_1.txt, close_2.txt, close_3.txt, close_4.txt, many_0.txt, many_1.txt, many_2.txt, many_3.txt, many_4.txt, many_5.txt, many_6.txt, many_7.txt, max.txt, maxBip.txt, multiple_0.txt, multiple_1.txt, multiple_2.txt, multiple_3.txt, multiple_4.txt, multiple_5.txt, multiple_6.txt, multiple_7.txt, oddLoop.txt, oddLoop_0.txt, oddLoop_1.txt, oddLoop_2.txt, rnd_0.txt, rnd_1.txt, rnd_2.txt, rnd_3.txt, rnd_4.txt, rnd_5.txt, rnd_6.txt, rnd_7.txt, rnd_8.txt, rnd_9.txt, sampleNo.txt, samplePath.txt, sampleTri.txt, star.txt, star_0.txt, star_1.txt, unique_0.txt, unique_1.txt, unique_2.txt, unique_3.txt, unique_4.txt, unique_5.txt, unique_6.txt, unique_7.txt, unique_8.txt, unique_9.txt |
| ケース名 | 結果 | 実行時間 | メモリ |
|---|---|---|---|
| OK_0.txt | AC | 48 ms | 10752 KiB |
| OK_1.txt | AC | 47 ms | 10752 KiB |
| OK_2.txt | AC | 50 ms | 10752 KiB |
| OK_3.txt | AC | 50 ms | 10752 KiB |
| OK_4.txt | AC | 49 ms | 10880 KiB |
| close_0.txt | AC | 61 ms | 9344 KiB |
| close_1.txt | AC | 56 ms | 9216 KiB |
| close_2.txt | AC | 58 ms | 9216 KiB |
| close_3.txt | AC | 62 ms | 9472 KiB |
| close_4.txt | AC | 69 ms | 10624 KiB |
| many_0.txt | AC | 53 ms | 10368 KiB |
| many_1.txt | AC | 54 ms | 10240 KiB |
| many_2.txt | AC | 54 ms | 10112 KiB |
| many_3.txt | AC | 53 ms | 10240 KiB |
| many_4.txt | AC | 61 ms | 10240 KiB |
| many_5.txt | AC | 53 ms | 10240 KiB |
| many_6.txt | AC | 55 ms | 10112 KiB |
| many_7.txt | AC | 55 ms | 10240 KiB |
| max.txt | AC | 30 ms | 5760 KiB |
| maxBip.txt | AC | 39 ms | 7168 KiB |
| multiple_0.txt | AC | 52 ms | 10368 KiB |
| multiple_1.txt | AC | 54 ms | 10240 KiB |
| multiple_2.txt | AC | 56 ms | 10112 KiB |
| multiple_3.txt | AC | 58 ms | 10240 KiB |
| multiple_4.txt | AC | 53 ms | 10240 KiB |
| multiple_5.txt | AC | 59 ms | 10240 KiB |
| multiple_6.txt | AC | 56 ms | 10240 KiB |
| multiple_7.txt | AC | 54 ms | 10240 KiB |
| oddLoop.txt | AC | 56 ms | 10624 KiB |
| oddLoop_0.txt | AC | 55 ms | 10496 KiB |
| oddLoop_1.txt | AC | 35 ms | 6272 KiB |
| oddLoop_2.txt | AC | 53 ms | 8960 KiB |
| rnd_0.txt | AC | 58 ms | 10752 KiB |
| rnd_1.txt | AC | 60 ms | 10240 KiB |
| rnd_2.txt | AC | 56 ms | 10496 KiB |
| rnd_3.txt | AC | 61 ms | 9856 KiB |
| rnd_4.txt | AC | 59 ms | 9728 KiB |
| rnd_5.txt | AC | 50 ms | 8064 KiB |
| rnd_6.txt | AC | 58 ms | 9856 KiB |
| rnd_7.txt | AC | 60 ms | 9728 KiB |
| rnd_8.txt | AC | 52 ms | 8960 KiB |
| rnd_9.txt | AC | 39 ms | 7168 KiB |
| sampleNo.txt | AC | 1 ms | 256 KiB |
| samplePath.txt | AC | 1 ms | 256 KiB |
| sampleTri.txt | AC | 1 ms | 256 KiB |
| star.txt | AC | 46 ms | 10480 KiB |
| star_0.txt | AC | 43 ms | 10480 KiB |
| star_1.txt | AC | 43 ms | 10480 KiB |
| unique_0.txt | AC | 52 ms | 9344 KiB |
| unique_1.txt | AC | 52 ms | 9472 KiB |
| unique_2.txt | AC | 59 ms | 9472 KiB |
| unique_3.txt | AC | 58 ms | 9472 KiB |
| unique_4.txt | AC | 53 ms | 9472 KiB |
| unique_5.txt | AC | 59 ms | 9472 KiB |
| unique_6.txt | AC | 52 ms | 9472 KiB |
| unique_7.txt | AC | 53 ms | 9472 KiB |
| unique_8.txt | AC | 58 ms | 9472 KiB |
| unique_9.txt | AC | 53 ms | 9472 KiB |