結果
| 問題 |
No.1424 Ultrapalindrome
|
| コンテスト | |
| ユーザー |
leaf_1415
|
| 提出日時 | 2021-03-12 21:45:06 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 41 ms / 2,000 ms |
| コード長 | 3,609 bytes |
| コンパイル時間 | 1,265 ms |
| コンパイル使用メモリ | 91,060 KB |
| 実行使用メモリ | 19,944 KB |
| 最終ジャッジ日時 | 2024-10-14 16:10:42 |
| 合計ジャッジ時間 | 2,888 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 29 |
コンパイルメッセージ
main.cpp: In function ‘llint getDiameter(std::vector<long long int>*, llint, llint&, llint&)’:
main.cpp:106:11: warning: ‘max_v’ may be used uninitialized [-Wmaybe-uninitialized]
106 | u = max_v;
| ~~^~~~~~~
ソースコード
#include <iostream>
#include <cstdio>
#include <cmath>
#include <ctime>
#include <cstdlib>
#include <cassert>
#include <vector>
#include <list>
#include <stack>
#include <queue>
#include <deque>
#include <map>
#include <set>
#include <bitset>
#include <string>
#include <algorithm>
#include <utility>
#include <complex>
#define rep(x, s, t) for(llint (x) = (s); (x) <= (t); (x)++)
#define reps(x, s) for(llint (x) = 0; (x) < (llint)(s).size(); (x)++)
#define chmin(x, y) (x) = min((x), (y))
#define chmax(x, y) (x) = max((x), (y))
#define sz(x) ((ll)(x).size())
#define ceil(x, y) (((x)+(y)-1) / (y))
#define all(x) (x).begin(),(x).end()
#define outl(...) dump_func(__VA_ARGS__)
#define inf 1e18
using namespace std;
typedef long long llint;
typedef long long ll;
typedef pair<ll, ll> P;
bool exceed(ll x, ll y, ll m){return x >= m / y + 1;}
struct edge{
ll to, cost;
edge(){}
edge(ll a, ll b){
to = a, cost = b;
}
};
template<typename T>
ostream& operator << (ostream& os, vector<T>& vec) {
for(int i = 0; i<vec.size(); i++) {
os << vec[i] << (i + 1 == vec.size() ? "" : " ");
}
return os;
}
template<typename T, typename U>
ostream& operator << (ostream& os, pair<T, U>& pair_var) {
os << "(" << pair_var.first << ", " << pair_var.second << ")";
return os;
}
template<typename T, typename U>
ostream& operator << (ostream& os, map<T, U>& map_var) {
for(typename map<T, U>::iterator itr = map_var.begin(); itr != map_var.end(); itr++) {
os << "(" << itr->first << ", " << itr->second << ")";
itr++;
if(itr != map_var.end()) os << ",";
itr--;
}
return os;
}
template<typename T>
ostream& operator << (ostream& os, set<T>& set_var) {
for(typename set<T>::iterator itr = set_var.begin(); itr != set_var.end(); itr++) {
os << *itr;
++itr;
if(itr != set_var.end()) os << " ";
itr--;
}
return os;
}
void dump_func() {cout << endl;}
template <class Head, class... Tail>
void dump_func(Head &&head, Tail &&... tail) {
cout << head;
if(sizeof...(Tail) > 0) cout << " ";
dump_func(std::move(tail)...);
}
llint dtmp[100005];
void distdfs(vector<llint> G[], int v, int p, llint d)
{
dtmp[v] = d;
for(int i = 0; i < G[v].size(); i++){
llint u = G[v][i], c = 1; //
if(u == p) continue;
distdfs(G, u, v, d+c);
}
}
llint getDiameter(vector<llint> G[], llint n, llint &u, llint &v)
{
distdfs(G, 1, -1, 0);
llint max_val = -1, max_v;
for(int i = 1; i <= n; i++){
if(max_val < dtmp[i]){
max_val = dtmp[i];
max_v = i;
}
}
u = max_v;
distdfs(G, u, -1, 0);
max_val = -1;
for(int i = 1; i <= n; i++){
if(max_val < dtmp[i]){
max_val = dtmp[i];
max_v = i;
}
}
v = max_v;
return max_val;
}
ll n;
vector<ll> G[100005];
vector<ll> vec;
bool dfs(int v, int p, int t)
{
if(v == t){
vec.push_back(v);
return true;
}
for(auto u : G[v]){
if(u == p) continue;
if(dfs(u, v, t)){
vec.push_back(v);
return true;
}
}
return false;
}
set<ll> S;
void dfs2(int v, int p, int d)
{
if(sz(G[v]) == 1) S.insert(d);
for(auto u : G[v]){
if(u == p) continue;
dfs2(u, v, d+1);
}
}
int main(void)
{
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n;
ll u, v;
rep(i, 1, n-1){
cin >> u >> v;
G[u].push_back(v);
G[v].push_back(u);
}
ll cnt = 0;
rep(i, 1, n) if(sz(G[i]) == 1) cnt++;
if(cnt == 2){
outl("Yes");
return 0;
}
ll d = getDiameter(G, n, u, v);
dfs(u, -1, v);
if(d % 2){
outl("No");
return 0;
}
ll r = vec[d/2];
dfs2(r, -1, 0);
rep(i, 1, n){
if(i == r) continue;
if(sz(G[i]) > 2){
outl("No");
return 0;
}
}
if(sz(S) == 1) outl("Yes");
else outl("No");
return 0;
}
leaf_1415