結果
| 問題 |
No.408 五輪ピック
|
| コンテスト | |
| ユーザー |
srup٩(๑`н´๑)۶
|
| 提出日時 | 2016-08-07 06:34:11 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 24 ms / 5,000 ms |
| コード長 | 1,396 bytes |
| コンパイル時間 | 509 ms |
| コンパイル使用メモリ | 62,944 KB |
| 実行使用メモリ | 6,272 KB |
| 最終ジャッジ日時 | 2024-11-07 04:38:42 |
| 合計ジャッジ時間 | 1,840 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 32 |
コンパイルメッセージ
main.cpp: In function ‘int main()’:
main.cpp:16:24: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
16 | int a, b; scanf("%d %d", &a, &b);
| ~~~~~^~~~~~~~~~~~~~~~~
ソースコード
#include <iostream>
#include <algorithm>
#include <vector>
#include <cstdio>
using namespace std;
#define rep(i,n) for(int i=0;i<(n);i++)
int n, m;
int A[50001];//クエリを入れておく
int B[50001];
vector<int> g[20001];//辺の隣接リスト
vector<int> h[20001];//h[v][u]で 0 - u - vという辺の繋がりを表している
int main(void){
cin >> n >> m;
rep(i, m){
int a, b; scanf("%d %d", &a, &b);
a--; b--;
g[a].push_back(b);
g[b].push_back(a);
A[i] = a; B[i] = b;
}
//1 - u - vとなるような辺を見つける
for(int u : g[0]){
for (int v : g[u]){
//頂点に戻るようなものは入れない
if(v != 0) h[v].push_back(u);
}
}
//クエリで与えられた辺を一つずつ見ていき、辺の両端の点が1からの距離が2の点であり、
//かつ閉路を満たすものであるかどうかを調べている
for (int i = 0; i < m; ++i){
if(A[i] == 0 || B[i] == 0) continue;
if(h[A[i]].size() > 3 && h[B[i]].size() > 3){
printf("YES\n"); return 0;
}
for (int p : h[A[i]]){
for (int q : h[B[i]]){
if(p != B[i] && p != q && A[i] != q){
printf("YES\n"); return 0;
}
}
}
}
printf("NO\n");
return 0;
}
srup٩(๑`н´๑)۶