結果
| 問題 |
No.812 Change of Class
|
| コンテスト | |
| ユーザー |
oxyshower
|
| 提出日時 | 2020-01-15 13:56:58 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 716 ms / 4,000 ms |
| コード長 | 1,348 bytes |
| コンパイル時間 | 1,778 ms |
| コンパイル使用メモリ | 180,608 KB |
| 実行使用メモリ | 20,396 KB |
| 最終ジャッジ日時 | 2024-06-12 21:44:04 |
| 合計ジャッジ時間 | 18,922 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 60 |
ソースコード
#include<bits/stdc++.h>
using namespace std;
#ifdef LOCAL_DEBUG
#include "LOCAL_DEBUG.hpp"
#endif
#define int long long
const int INF = 1LL << 60;
struct edge{ int to,cost; };
vector<int> dikstra(int s,vector<vector<edge>> G){
typedef pair<int, int> P;
const int INF = 1LL << 60;
priority_queue<P,vector<P>,greater<P>> que;
vector<int> d(G.size(),INF); //sからの最短距離
d[s] = 0;
que.push({0,s}); //{最短距離,頂点}
while( !que.empty() ){
P p = que.top(); que.pop();
int v = p.second;
if(d[v] < p.first) continue;
for(auto e : G[v]){
if(d[e.to] > d[v] + e.cost){
d[e.to] = d[v] + e.cost;
que.push( {d[e.to],e.to} );
}
}
}
return d;
}
signed main(){
int n, m; cin >> n >> m;
vector<vector<edge>> G(n);
for(int i = 0; i < m; i++){
int s, t; cin >> s >> t;
s--, t--;
G[s].push_back({t, 1});
G[t].push_back({s, 1});
}
int q; cin >> q;
for(int i = 0; i < q; i++){
int s; cin >> s;
s--;
auto dp = dikstra(s, G);
int friends = 0, date = 0;
for(int i = 0; i < n; i++){
if(i != s && dp[i] != INF){
friends++;
date = max(date, dp[i]);
}
}
int honsitu = 0, t = 1;
while(t < date){
honsitu++;
t *= 2;
}
cout << friends << " " << honsitu << endl;
}
return 0;
}
oxyshower