-
[16168] 퍼레이드BOJ 2022. 5. 22. 03:48
https://www.acmicpc.net/problem/16168
16168번: 퍼레이드
첫 번째 줄에 지점의 개수 V, 연결 구간의 개수 E가 주어진다. (1 ≤ V ≤ E ≤ 3000) 이후 E개의 줄에 걸쳐 각 연결 구간이 연결하는 두 지점의 번호 Va, Vb가 공백을 사이에 두고 주어진다. (1 ≤ Va,
www.acmicpc.net
연결그래프이면서, 홀수간선을 갖는 정점이 2개 이하인지를 판별해야 한다.
bfs로 아무거나 시작점으로 잡아서 v개를 방문했는지를 체크하고,
입력을 인접리스트로 받으면 1&adj[i].size()로 홀수간선을 갖는지를 파악할 수 있다.
#include <bits/stdc++.h>using namespace std;#ifdef ONLINE_JUDGEconstexpr bool local = false;#elseconstexpr bool local = true;#endifusing ll = long long;using pi = pair<ll, ll>;vector<int> adj[3001];queue<int> q;int v, e;bool vst[3001];int main(void) {if (!local) ios_base::sync_with_stdio(0), cin.tie(0);cin >> v >> e;int i;for (i = 0; i < e; i++) {int X, Y;cin >> X >> Y;adj[X].push_back(Y);adj[Y].push_back(X);}q.push(1);vst[1] = true;int chk = 1;while (!q.empty()) {int cur = q.front();q.pop();for (auto& nxt : adj[cur]) {if (vst[nxt] == false) {vst[nxt] = true;q.push(nxt);chk++;}}}if (chk != v) {cout << "NO";return 0;}int cnt = 0;for (i = 1; i <= v and cnt <= 2; i++) {int S = adj[i].size();if (S & 1) cnt++;}cout << (cnt <= 2 ? "YES" : "NO");return 0;}
'BOJ' 카테고리의 다른 글
[2585] 경비행기 (0) 2022.06.23 [1504] 특정한 최단 경로 (0) 2022.06.21 [1199] 오일러 회로 (0) 2022.05.22 [18005] Even or Odd? (0) 2022.05.20 비밀번호 발음하기 (0) 2022.05.16