본문 바로가기

전체 글

ABC306 결과 블루는 커녕 민트 복구도 못하게 생겼다. 근데 unrated??????? A - 0:00 ~ 0:40 그냥 구현. 바로 제출해서 맞았다. 풀이)문자열을 입력받고, 반복문으로 한 문자를 2번씩 출력하면 됩니다. ll n, m, q, k; string s,t; set st; int main(){ fast; cin>>n>>s; for(auto i : s)couta; v[a].push_back(i+1); } vector ans; for(int i = 1 ; i >b; memset(dp,-1,sizeof(dp)); coutn>>k>>q; for(int i = 0 ; i < k ; i++)s.insert(0); for(int i = 0 ; i < n-k ; i++)t.insert(0); while(q--){ .. 더보기
BOJ 18770 - 불안정한 물질 (P2) #dfs #tree-dp 구현이 짜증나는 문제다. 문제는 꽤 재밌는데, n개의 노드와 n개의 간선이 있다. 이상태에서 인접하지 않은 정점만 골라서 최대 점수를 얻는 문제다. 만약 n개의 노드가 다 연결되어 있다면 그 그래프는 트리에 하나의 간선을 추가한 형태일 것이고, 그 간선에 의해 indegree가 2인 정점이 생긴다. 그래서 이 정점과 그 부모를 골라내서 이 정점들끼리는 미리 고를지 말지를 결정해두고, 간선을 하나 지우면 트리가 된다. 그 이후로 트리 dp를 돌리면 된다. 과연 이게 가능할까? 생각해보면 트리에서 간선만 하나 추가한 형태이기 때문에, 고려할 정점은 무조건 3개이다. 그래서 이 3개끼리 잘 케이스를 나눠가면서 연결그래프를 유지하되 간선을 하나 지울 수 있다. 그러면 트리가 되므로 .. 더보기
BOJ 1739 - 도로 정비하기 티어: D5 (체감 D5) 알고리즘: 2-SAT 여기서는 가로 도로를 행, 세로 도로를 열로 표기한다. 어떤 버스가 (a,b)에서 (c,d)로 갈려면 다음 2가지 중 하나를 이용해야 한다. (도로를 최대 2개밖에 이용하지 못하기 때문) 1. a행, d열을 이용한다. 2. c행, b열을 이용한다. 일단 a≠c, b≠d라고 가정하고 예제 1의 테스트케이스 1을 보자. 위 그림은 테스트케이스 1번에서 (1,1)에서 (6,6)으로 가는 버스를 나타낸 것이다. 빨간색 경로는 1행과 6열을 이용해서 (1,1)에서 (6,6)으로 간다. 파란색 경로는 1열과 6행을 이용해서 (1,1)에서 (6,6)으로 간다. 위를 통해 (a,b)에서 (c,d)로 갈려면 a행, d열을 이용하거나 c행, b열을 이용해야 함을 알 수 있다.. 더보기