結果
| 問題 |
No.994 ばらばらコイン
|
| コンテスト | |
| ユーザー |
monkukui2
|
| 提出日時 | 2020-02-08 23:31:16 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,190 bytes |
| コンパイル時間 | 1,219 ms |
| コンパイル使用メモリ | 112,884 KB |
| 実行使用メモリ | 12,288 KB |
| 最終ジャッジ日時 | 2024-10-01 05:31:05 |
| 合計ジャッジ時間 | 3,909 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 7 WA * 16 |
ソースコード
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <deque>
#include <list>
#include <queue>
#include <stack>
#include <vector>
#include <utility>
#include <algorithm>
#include <map>
#include <set>
#include <complex>
#include <cmath>
#include <limits>
#include <climits>
#include <ctime>
#include <cassert>
#include <numeric>
#include <functional>
#include <bitset>
using namespace std;
using lint = long long int;
long long int INF = 1001001001001001LL;
int inf = 1000000007;
long long int MOD = 1000000007LL;
double PI = 3.1415926535897932;
template<typename T1,typename T2>inline void chmin(T1 &a,const T2 &b){if(a>b) a=b;}
template<typename T1,typename T2>inline void chmax(T1 &a,const T2 &b){if(a<b) a=b;}
#define ALL(a) a.begin(),a.end()
#define RALL(a) a.rbegin(),a.rend()
// verified : http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=GRL_1_A
// ごめんダイクストラペタリした
template<typename T>
vector<T> dijkstra(vector<vector<pair<int, T>>> &g, int s){
int n = g.size();
// numeric_limits がうまく使えない場合は自分で INF を定義する.
const auto inf = numeric_limits<T>::max();
vector<T> dist(n, inf);
using P = pair<T, int>;
// 小さい順に取り出せる
priority_queue<P, vector<P>, greater<P>> que;
dist[s] = 0;
que.emplace(dist[s], s);
while(!que.empty()){
T cost;
int node;
tie(cost, node) = que.top();
que.pop();
if(dist[node] < cost) continue;
for(auto &e : g[node]){
auto next_cost = cost + e.second;
int next_node = e.first;
if(dist[next_node] <= next_cost) continue;
dist[next_node] = next_cost;
que.emplace(next_cost, next_node);
}
}
return dist;
}
/* do your best */
int main() {
int n, k; cin >> n >> k;
vector<vector<pair<int, lint>>> g(n);
for(int i = 0; i < n - 1; i++) {
int a, b; cin >> a >> b;
a--;
b--;
g[a].push_back({b, 1});
g[b].push_back({a, 1});
}
if(n < k) {
cout << -1 << endl;
return 0;
}
auto dist = dijkstra(g, 0);
sort(ALL(dist));
int ans = 0;
for(int i = 0; i < k; i++) ans += dist[i];
cout << ans << endl;
return 0;
}
monkukui2