본문 바로가기

algorithm

(198)
[BOJ] 16168번 퍼레이드 (C++) https://www.acmicpc.net/problem/16168 16168번: 퍼레이드 첫 번째 줄에 지점의 개수 V, 연결 구간의 개수 E가 주어진다. (1 ≤ V ≤ E ≤ 3000) 이후 E개의 줄에 걸쳐 각 연결 구간이 연결하는 두 지점의 번호 Va, Vb가 공백을 사이에 두고 주어진다. (1 ≤ Va, www.acmicpc.net #include #include using namespace std; int v, e; vector adj[3001]; int degree[3001]; bool visited[3001]; void dfs(int a){ visited[a] = true; for(int i = 0; i < adj[a].size(); i++){ int n = adj[a][i]; if(!v..
[BOJ] 1199번 오일러 회로 (C++) https://www.acmicpc.net/submit/1199/43870740 로그인 www.acmicpc.net #include #include #define MAX 1001 using namespace std; int N; stack adj[MAX]; int edges[MAX][MAX]; int degree[MAX]; void dfs(int n) { while (!adj[n].empty()) { int next = adj[n].top(); adj[n].pop(); if (edges[n][next] && edges[next][n]) { edges[n][next]--; edges[next][n]--; dfs(next); } } cout N; for (int i = 1; i < N + 1; i++) { ..
[BOJ] 2150번 Strongly Connected Component (C++) https://www.acmicpc.net/problem/2150 2150번: Strongly Connected Component 첫째 줄에 두 정수 V(1 ≤ V ≤ 10,000), E(1 ≤ E ≤ 100,000)가 주어진다. 이는 그래프가 V개의 정점과 E개의 간선으로 이루어져 있다는 의미이다. 다음 E개의 줄에는 간선에 대한 정보를 나타내는 두 정 www.acmicpc.net #include #include #include #include #define MAX 10001 using namespace std; int v, e, id; vector a[MAX]; int d[MAX]; bool finished[MAX]; stack s; int sccNum; vector SCC; int dfs(int c..
[BOJ] 4386번 별자리 만들기 (C++) https://www.acmicpc.net/problem/4386 4386번: 별자리 만들기 도현이는 우주의 신이다. 이제 도현이는 아무렇게나 널브러져 있는 n개의 별들을 이어서 별자리를 하나 만들 것이다. 별자리의 조건은 다음과 같다. 별자리를 이루는 선은 서로 다른 두 별을 일 www.acmicpc.net #include #include #include #include using namespace std; int n; int parent[101]; vector star; vector v; int getParent(int a){ if(a == parent[a]) return a; return getParent(parent[a]); } void unionParent(int a, int b){ a = ge..
[BOJ] 2468번 안전 영역 (C++) https://www.acmicpc.net/problem/2468 2468번: 안전 영역 재난방재청에서는 많은 비가 내리는 장마철에 대비해서 다음과 같은 일을 계획하고 있다. 먼저 어떤 지역의 높이 정보를 파악한다. 그 다음에 그 지역에 많은 비가 내렸을 때 물에 잠기지 않는 www.acmicpc.net #include #include #include #include using namespace std; int n, cnt; int arr[101][101]; int fixedarr[101][101]; bool visited[101][101]; int dx[4] = { -1, 0, 0, 1 }; int dy[4] = { 0, -1, 1, 0 }; void bfs(int a, int b) { queue q;..
[BOJ] 20040번 사이클 게임 (C++) https://www.acmicpc.net/problem/20040 20040번: 사이클 게임 사이클 게임은 두 명의 플레이어가 차례대로 돌아가며 진행하는 게임으로, 선 플레이어가 홀수 번째 차례를, 후 플레이어가 짝수 번째 차례를 진행한다. 게임 시작 시 0 부터 n − 1 까지 고유한 www.acmicpc.net #include using namespace std; int n, m; int parent[500001]; int getParent(int a){ if(a == parent[a]) return a; return parent[a] = getParent(parent[a]); } void unionParent(int a, int b){ a = getParent(a); b = getParent(b)..
[BOJ] 1197번 최소 스패닝 트리 (C++) https://www.acmicpc.net/problem/1197 1197번: 최소 스패닝 트리 첫째 줄에 정점의 개수 V(1 ≤ V ≤ 10,000)와 간선의 개수 E(1 ≤ E ≤ 100,000)가 주어진다. 다음 E개의 줄에는 각 간선에 대한 정보를 나타내는 세 정수 A, B, C가 주어진다. 이는 A번 정점과 B번 정점이 www.acmicpc.net #include #include #include using namespace std; int v, e; int parent[10001]; int getParent(int x){ if(parent[x] == x) return x; return parent[x] = getParent(parent[x]); } void unionParent(int a, in..
[BOJ] 1717번 집합의 표현 (C++) https://www.acmicpc.net/problem/1717 1717번: 집합의 표현 첫째 줄에 n(1 ≤ n ≤ 1,000,000), m(1 ≤ m ≤ 100,000)이 주어진다. m은 입력으로 주어지는 연산의 개수이다. 다음 m개의 줄에는 각각의 연산이 주어진다. 합집합은 0 a b의 형태로 입력이 주어진다. 이는 www.acmicpc.net #include using namespace std; int n, m; int parent[1000001]; int getParent(int x){ if(parent[x] == x) return x; return parent[x] = getParent(parent[x]); } void unionParent(int a, int b){ a = getParent..