結果
| 問題 |
No.5000 特殊ジャッジテスト(テスト用)
|
| ユーザー |
asd
|
| 提出日時 | 2015-06-13 05:06:29 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,436 bytes |
| コンパイル時間 | 7,039 ms |
| 実行使用メモリ | 2,500 KB |
| スコア | -872 |
| 最終ジャッジ日時 | 2018-03-12 00:01:28 |
|
ジャッジサーバーID (参考情報) |
judge6 / |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | WA * 2 TLE * 1 |
ソースコード
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#define MX 10005
using namespace std;
vector<int> adj[MX];
int N, len;
int dp[MX], pr[MX];
int deg[MX];
void dfs(int u, int p, int d) {
dp[u] = d;
pr[u] = p;
int i, v;
for (i = 0; i < adj[u].size(); i++) {
v = adj[u][i];
if (v != p) dfs(v, u, d + 1);
}
}
int calc(int u, int p, int d) {
int ret = 0, i, v;
for (i = 0; i < adj[u].size(); i++) {
v = adj[u][i];
if (v != p) ret += !!calc(v, u, d + 1);
}
if (d == len / 2) return deg[u] = 1;
return deg[u] = ret;
}
int main() {
int T, u, v, i, j, k;
for (scanf("%d", &T); T--; ) {
scanf("%d", &N);
for (i = 1; i <= N; i++) {
adj[i].clear();
deg[i] = 0;
}
for (i = 0; i < N - 1; i++) {
scanf("%d%d", &u, &v);
adj[u].push_back(v);
adj[v].push_back(u);
}
if (N == 2) {
puts("NO");
continue;
}
len = 0;
dfs(1, 0, 0);
for (i = 1; i <= N; i++) len = max(len, dp[i]);
for (i = 1; i <= N; i++) if (dp[i] == len) {
dfs(i, 0, 0);
break;
}
for (i = 1; i <= N; i++) len = max(len, dp[i]);
k = len / 2;
for (i = 1; i <= N; i++) if (dp[i] == len) {
u = i;
while (k--) u = pr[u];
break;
}
if (len & 1) {
v = pr[u];
calc(u, v, 0);
calc(v, u, 0);
if (deg[u] == 1 || deg[v] == 1) puts("YES");
else puts("NO");
} else {
calc(u, 0, 0);
if (deg[u] <= 2) puts("YES");
else puts("NO");
}
}
return 0;
}
asd