結果
| 問題 |
No.812 Change of Class
|
| コンテスト | |
| ユーザー |
hamuhei4869
|
| 提出日時 | 2019-03-21 15:08:32 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,785 bytes |
| コンパイル時間 | 1,632 ms |
| コンパイル使用メモリ | 173,528 KB |
| 実行使用メモリ | 18,256 KB |
| 最終ジャッジ日時 | 2024-06-12 06:31:04 |
| 合計ジャッジ時間 | 20,772 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | WA * 3 |
| other | WA * 60 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
using LL = long long;
const LL LINF = 1e18;
class Edge{
public:
int from,to;
LL cost;
Edge(int f, int t,LL c){
from = f;
to = t;
cost = c;
}
};
std::vector<LL> dijkstra(int s,int N,vector<Edge> E){
std::vector<LL> ans(N,LINF);
std::vector<std::vector<Edge>> Edges(N);
for(auto e : E){
Edges.at(e.from).push_back(e);
}
queue<pair<LL,int>> que;
ans.at(s)= 0;
que.push(make_pair(0,s));
while(!que.empty()){
pair<LL,int> p = que.front();que.pop();
if(ans.at(p.second) < p.first)continue;
for(int i = 0;i < Edges.at(p.second).size();i++){
if(ans.at(Edges.at(p.second).at(i).to) != LINF)continue;
if(ans.at(p.second) + Edges.at(p.second).at(i).cost < ans.at(Edges.at(p.second).at(i).to)){
ans.at(Edges.at(p.second).at(i).to) = ans.at(p.second) + Edges.at(p.second).at(i).cost;
que.push(make_pair(ans.at(Edges.at(p.second).at(i).to),Edges.at(p.second).at(i).to));
}
}
}
return ans;
}
int main(){
int N,M;
cin >> N >> M;
vector<Edge> Edges;
for(int i = 0;i < M;i++){
int p,q;cin >> p >> q;
p--,q--;
Edges.push_back(Edge(p,q,1));
Edges.push_back(Edge(q,p,1));
}
int Q;cin >> Q;
for(int i = 0;i < Q;i++){
int A;cin >> A;
A--;
vector<LL> dis = dijkstra(A, N, Edges);
LL d = 0;
LL cnt = 0;
for(int j = 0;j < N;j++){
if(dis.at(j) != LINF){
d = max(d, dis.at(j));
cnt++;
}
}
int ans = 0;
if(d != 0)ans = ceil(log2(d));
cout<<cnt<<" "<<ans<<endl;
}
}
hamuhei4869