結果
| 問題 |
No.806 木を道に
|
| コンテスト | |
| ユーザー |
ugis_prog
|
| 提出日時 | 2019-03-22 23:41:48 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,542 bytes |
| コンパイル時間 | 770 ms |
| コンパイル使用メモリ | 86,652 KB |
| 実行使用メモリ | 11,112 KB |
| 最終ジャッジ日時 | 2024-09-19 07:07:07 |
| 合計ジャッジ時間 | 2,523 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 8 WA * 19 |
ソースコード
#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
#include<unordered_set>
using namespace std;
int main(){
int N;
cin >> N;
vector<vector<int>> G(N);
vector<bool> visited(N,false);
vector<int> back(N,-1);
int start = -1;
for(int i=0;i<N-1;i++){
int a,b;
cin >> a >> b;
a--, b--;
G[a].push_back(b);
G[b].push_back(a);
if(G[a].size() == 1) start = a;
if(G[b].size() == 1) start = b;
}
queue<pair<int,int>> Q;
Q.push({start,0});
visited[start] = true;
int end = 0;
int dia = 0;
while(!Q.empty()){
pair<int,int> p = Q.front();
Q.pop();
for(int to : G[p.first]){
if(visited[to]) continue;
visited[to] = true;
if(dia <= p.second+1){
back[to] = p.first;
end = to;
dia = p.second+1;
}
Q.push({to,p.second+1});
}
}
unordered_set<int> st;
while(end != start){
st.insert(end);
end = back[end];
}
st.insert(start);
int ans = 0;
for(int i=0;i<N;i++){
if(st.count(i)) continue;
if(G[i].size() > 0){
for(int to : G[i]){
if(st.count(to)){
if(G[i].size() == 1) ans++;
else ans += G[i].size() - 1;
break;
}
else ans += G[i].size() - 1;
}
}
}
cout << ans << endl;
}
ugis_prog