Submission #1070183
Source Code Expand
#include <iostream> #include <vector> #include <algorithm> using namespace std; #define rep(i,n) for (int i=0; i < int(n); i++) int m; // 素集合データ構造 struct UnionFind { // par[i]:データiが属する木の親の番号。i == par[i]のとき、データiは木の根ノードである vector<int> par; // sizes[i]:根ノードiの木に含まれるデータの数。iが根ノードでない場合は無意味な値となる vector<int> sizes; UnionFind(int n) : par(n), sizes(n, 1) { // 最初は全てのデータiがグループiに存在するものとして初期化 rep(i, n) par[i] = i; } // データxが属する木の根を得る int find(int x) { if (x == par[x]) return x; return par[x] = find(par[x]); // 根を張り替えながら再帰的に根ノードを探す } // 2つのデータx, yが属する木をマージする void unite(int x, int y) { // データの根ノードを得る x = find(x); y = find(y); // 既に同じ木に属しているならマージしない if (x == y) return; // xの木がyの木より大きくなるようにする if (sizes[x] < sizes[y]) swap(x, y); // xがyの親になるように連結する par[y] = x; sizes[x] += sizes[y]; // sizes[y] = 0; // sizes[y]は無意味な値となるので0を入れておいてもよい } // 2つのデータx, yが属する木が同じならtrueを返す bool same(int x, int y) { return find(x) == find(y); } // データxが含まれる木の大きさを返す int size(int x) { return sizes[find(x)]; } }; // 頂点a, bをつなぐコストcostの(無向)辺 struct Edge { int a, b, cost; // コストの大小で順序定義 bool operator<(const Edge& o) const { return cost < o.cost; } }; // 頂点数と辺集合の組として定義したグラフ struct Graph { int n; // 頂点数 vector<Edge> es; // 辺集合 // クラスカル法で無向最小全域木のコストの和を計算する // グラフが非連結のときは最小全域森のコストの和となる int kruskal() { // コストが小さい順にソート sort(es.begin(), es.end()); UnionFind uf(n); int cnt = 0; rep(ei, es.size()) { Edge& e = es[ei]; if (!uf.same(e.a, e.b)) { // 辺を追加しても閉路ができないなら、その辺を採用する cnt++; uf.unite(e.a, e.b); } } return m - cnt; } }; // 標準入力からグラフを読み込む Graph input_graph() { Graph g; cin >> g.n >> m; rep(i, m) { Edge e; cin >> e.a >> e.b >> e.cost; e.a--; e.b--; g.es.push_back(e); } return g; } int main() { Graph g = input_graph(); cout << g.kruskal() << endl; return 0; }
Submission Info
Submission Time | |
---|---|
Task | D - Candidates of No Shortest Paths |
User | clavis1107 |
Language | C++14 (GCC 5.4.1) |
Score | 0 |
Code Size | 2832 Byte |
Status | WA |
Exec Time | 3 ms |
Memory | 256 KB |
Judge Result
Set Name | Sample | All | ||||||
---|---|---|---|---|---|---|---|---|
Score / Max Score | 0 / 0 | 0 / 400 | ||||||
Status |
|
|
Set Name | Test Cases |
---|---|
Sample | sample_01.txt, sample_02.txt |
All | subtask_1_01.txt, subtask_1_02.txt, subtask_1_03.txt, subtask_1_04.txt, subtask_1_05.txt, subtask_1_06.txt, subtask_1_07.txt, subtask_1_08.txt, subtask_1_09.txt, subtask_1_10.txt, subtask_1_11.txt, subtask_1_12.txt, subtask_1_13.txt, subtask_1_14.txt, subtask_1_15.txt, subtask_1_16.txt, subtask_1_17.txt, subtask_1_18.txt, subtask_1_19.txt, subtask_1_20.txt, subtask_1_21.txt, subtask_1_22.txt, subtask_1_23.txt, subtask_1_24.txt, subtask_1_25.txt, subtask_1_26.txt, subtask_1_27.txt, subtask_1_28.txt |
Case Name | Status | Exec Time | Memory |
---|---|---|---|
sample_01.txt | AC | 3 ms | 256 KB |
sample_02.txt | AC | 3 ms | 256 KB |
subtask_1_01.txt | AC | 3 ms | 256 KB |
subtask_1_02.txt | WA | 3 ms | 256 KB |
subtask_1_03.txt | WA | 3 ms | 256 KB |
subtask_1_04.txt | AC | 3 ms | 256 KB |
subtask_1_05.txt | WA | 3 ms | 256 KB |
subtask_1_06.txt | WA | 3 ms | 256 KB |
subtask_1_07.txt | WA | 3 ms | 256 KB |
subtask_1_08.txt | WA | 3 ms | 256 KB |
subtask_1_09.txt | WA | 3 ms | 256 KB |
subtask_1_10.txt | WA | 3 ms | 256 KB |
subtask_1_11.txt | WA | 3 ms | 256 KB |
subtask_1_12.txt | WA | 3 ms | 256 KB |
subtask_1_13.txt | AC | 3 ms | 256 KB |
subtask_1_14.txt | WA | 3 ms | 256 KB |
subtask_1_15.txt | AC | 3 ms | 256 KB |
subtask_1_16.txt | WA | 3 ms | 256 KB |
subtask_1_17.txt | WA | 3 ms | 256 KB |
subtask_1_18.txt | WA | 3 ms | 256 KB |
subtask_1_19.txt | WA | 3 ms | 256 KB |
subtask_1_20.txt | WA | 3 ms | 256 KB |
subtask_1_21.txt | WA | 3 ms | 256 KB |
subtask_1_22.txt | WA | 3 ms | 256 KB |
subtask_1_23.txt | WA | 3 ms | 256 KB |
subtask_1_24.txt | WA | 3 ms | 256 KB |
subtask_1_25.txt | WA | 3 ms | 256 KB |
subtask_1_26.txt | WA | 3 ms | 256 KB |
subtask_1_27.txt | WA | 3 ms | 256 KB |
subtask_1_28.txt | AC | 3 ms | 256 KB |