結果
| 問題 |
No.408 五輪ピック
|
| ユーザー |
ふーらくたる
|
| 提出日時 | 2016-08-05 23:45:20 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 16 ms / 5,000 ms |
| コード長 | 2,144 bytes |
| コンパイル時間 | 757 ms |
| コンパイル使用メモリ | 62,376 KB |
| 実行使用メモリ | 5,376 KB |
| 最終ジャッジ日時 | 2024-11-07 04:36:46 |
| 合計ジャッジ時間 | 2,049 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 32 |
コンパイルメッセージ
main.cpp: In function ‘int main()’:
main.cpp:69:13: warning: ‘v2_have_node’ may be used uninitialized in this function [-Wmaybe-uninitialized]
69 | if (v1_have_node != v2_have_node) {
| ^~
main.cpp:69:13: warning: ‘v1_have_node’ may be used uninitialized in this function [-Wmaybe-uninitialized]
ソースコード
#include <iostream>
#include <utility>
#include <vector>
using namespace std;
typedef pair<int, int> Edge;
const int MAX_N = 3 * 10000;
const int MAX_M = 5 * 10000;
bool is_connected_one[MAX_N];
Edge edges[MAX_M];
vector<int> connected_target_nodes[MAX_N];
int main() {
cin.tie(0);
ios::sync_with_stdio(false);
int N, M;
cin >> N >> M;
for (auto i = 0; i < M; i++) {
int a, b;
cin >> a >> b;
edges[i] = Edge(a - 1, b - 1);
if (a == 1) is_connected_one[b - 1] = true;
if (b == 1) is_connected_one[a - 1] = true;
}
for (auto i = 0; i < M; i++) {
auto v1 = edges[i].first, v2 = edges[i].second;
if (is_connected_one[v1]) {
connected_target_nodes[v2].push_back(v1);
}
if (is_connected_one[v2]) {
connected_target_nodes[v1].push_back(v2);
}
}
for (auto i = 0; i < M; i++) {
auto v1 = edges[i].first, v2 = edges[i].second;
if (v1 == 0 || v2 == 0) continue;
// v1, v2は除いたとき、どっちも1以上で
// かつ (どちらかが2 もしくは どちらも違う頂点を指す)
auto v1_num = connected_target_nodes[v1].size(),
v2_num = connected_target_nodes[v2].size();
if (is_connected_one[v2]) v1_num--;
if (is_connected_one[v1]) v2_num--;
if (v1_num < 1 || v2_num < 1) continue;
if (v1_num >= 2 || v2_num >= 2) {
cout << "YES" << endl;
return 0;
} else {
int v1_have_node, v2_have_node;
for (auto node : connected_target_nodes[v1]) {
if (node != v2) {
v1_have_node = node;
break;
}
}
for (auto node : connected_target_nodes[v2]) {
if (node != v1) {
v2_have_node = node;
break;
}
}
if (v1_have_node != v2_have_node) {
cout << "YES" << endl;
return 0;
}
}
}
cout << "NO" << endl;
return 0;
}
ふーらくたる