í°ì¤í 리 ë·°
문ì : https://www.acmicpc.net/problem/13265
13265ë²: ìì¹ í기
ê° í ì¤í¸ ì¼ì´ì¤ì ëí´ì possible ì´ë impossible ì ì¶ë ¥íë¤. 2 ê°ì§ ììì¼ë¡ ìì¹ ì´ ê°ë¥íë©´ possible. ë¶ê°ë¥íë©´ impossible ì´ë¤.
www.acmicpc.net



ð Solve
SWEAì 문ì ì íì´ ë¹ì·íê² ì ì¼ ë¨¼ì í ì¤í¸ ì¼ì´ì¤ì ê°ìê° ì£¼ì´ì§ëë¤.
í´ë¹ ì ë ¥ì í ì¤í¸ì¼ì´ì¤ë³ë¡ ëëë©´ ìë 그림과 ê°ì´ ìì 를 ëë ì ììµëë¤.

ì´ ì¤ í ì¤í¸ì¼ì´ì¤ 1ë²ì ê·¸ëíë¡ ê·¸ë ¤ ë ê°ì§ ìì¼ë¡ ì¹ í´ë³´ë©´ ë¤ìê³¼ ê°ì´ ë¶ê°í ê²½ì°ë¥¼ ì°¾ì ì ììµëë¤.

ë°ë¼ì 문ì 를 í´ê²°í기ìí´ color ì¼ì°¨ì ë°°ì´ì ì¬ì©íììµëë¤.
ë ê°ì§ ìì ìì를 빨ê°ìê³¼ íëìì´ë¼ê³ í´ë´ ìë¤.
colorë°°ì´ì ê°ì´ 0ì´ë©´ ë ¸ë 4ë²ê³¼ ê°ì´ ì¹ í´ì§ì§ ìì ìí, 1ì´ë©´ 빨ê°ì, -1ì´ë©´ íëìì ëíë´ëë¡ íìµëë¤.
ì´ë, ì¹ í´ì§ì§ ìì ìíì¸ 0ì ìì§ ë°©ë¬¸íì§ ììë¤ë ì미 ëí ê°ì§ê³ ììµëë¤.
ê° ë ¸ëììë¶í° ì°ê²°ëì´ìë ë ¸ëë¤ì ì ì¥í기 ìí´ List ë°°ì´ì ì¬ì©íìµëë¤.
ë ¸ë ì 체를 íìíë©° ìì§ ë°©ë¬¸íì§ ìì(colorë°°ì´ì ê°ì´ 0ì¸) ì§ì ì´ ìë¤ë©´, ììë¡ ë¹¨ê°ì(1)ì¼ë¡ ì±ì°ê³ dfs를 ëë©° ëë¨¸ì§ ë ¸ëì ìì ì¹ í©ëë¤.
dfsììë ê° ë ¸ëì ì°ê²°ëì´ìë ë ¸ë를 íëì© êº¼ë´ì íìí©ëë¤.
íì¬ ë ¸ëê° ë°ë¡ ì ë ¸ëì ê°ì ìì´ë¼ë©´ ì ìë³ìì¸ isPossibleì falseë¡ ì¤ì íê³ return í©ëë¤.
color[íì¬ë ¸ë]ê° 0ì¼ë¡, ìì§ ë°©ë¬¸íì§ ìì ê³³ì´ë¼ë©´ color[ì ë ¸ë]ì ë°ëìì ì¹ íê³ íì¬ ë ¸ë를 기ì¤ì¼ë¡ ë¤ì dfs를 ëê² ë©ëë¤.
ë§ì½ dfs를 ëë ì¤ê°ì returníì¬ isPossibleê° falseê°ì ê°ì§ê³ ìë¤ë©´ "impossible"ì ì¶ë ¥íê³ ,
모ë dfs를 ë¤ ë í ë¹ ì ¸ëìë¤ë©´ "possible"ì ì¶ë ¥í©ëë¤.
â Code
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
public class Main {
static int N; //ëê·¸ë¼ë¯¸ ê°ì
static int M; //ì§ì ì ê°ì
static int[] color;
static List<Integer>[] list;
static boolean isPossible;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
StringBuilder sb = new StringBuilder();
int T = Integer.parseInt(br.readLine());
for(int t=1;t<=T;t++){
st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
color = new int[N+1];
list = new List[N+1];
isPossible = true;
for(int i=0;i<list.length;i++){
list[i] = new ArrayList<>();
}
for(int i=0;i<M;i++){
st = new StringTokenizer(br.readLine());
int from = Integer.parseInt(st.nextToken());
int to = Integer.parseInt(st.nextToken());
//ìë°©í¥ ì°ê²°
list[from].add(to);
list[to].add(from);
}
for(int i=1;i<=N;i++){
if(color[i]==0){
color[i] = 1;
dfs(i);
}
}
if(isPossible) sb.append("possible\n");
else sb.append("impossible\n");
}
System.out.println(sb);
}
private static void dfs(int depth){
for(int i=0;i<list[depth].size();i++){
int cur = list[depth].get(i); //ê° ë
¸ëì ì°ê²°ëì´ìë ë
¸ë
if(color[cur]==color[depth]){ //íì¬ ë
¸ëê° depthë
¸ëì ê°ì¼ë©´ ìì´ ëê°ì ê²½ì°ë¤.
//ìì´ ëê°ì¼ë©´ impossible
isPossible = false; //ë¶ê°ë¥ íì
return;
}else if(color[cur]==0){
//ìì§ ë°©ë¬¸ ìíê³³ì´ë©´
color[cur] = color[depth]*-1; //depthì ë°ëì ìì ë£ì´ì¤
dfs(cur);
}
}
}
}'ìê³ ë¦¬ì¦ > ë°±ì¤' ì¹´í ê³ ë¦¬ì ë¤ë¥¸ ê¸
- ë°ê°ìµëë¤. ê¸ì 구ì±ê³¼ íë¦ì´ ë§¤ì° ìì°ì¤ë¬ì ìµëë¤.â¯
- ë¤ë ë¤ ê°ëë¤~ ì½ë ë´ë´ 몰ì íì´ì. ììì ìë¯¸ë¡ â¯
- ë°ë»í ì´ì¼ê¸° ëë¶ì íë£¨ê° ë ì¦ê±°ìì¡ì´ì. ê°ì¬í©ëâ¯
- ê¸ì´ ì°¸ ê¹ì´ê° ìë¤ì. ê°ì ê³¼ ë ¼ë¦¬ê° ì ì¡°í를 ì´ë¤â¯
- Total
- 1,011
- Today
- 0
- Yesterday
- 0
- Retrofit2
- BFS
- Java
- cicd
- ìì´í 61
- í í°ê¸°ë°ì¸ì¦
- ë°±ì¤
- ì¡°í©
- ìí
- ìì íì
- ìê³ ë¦¬ì¦
- dp
- docker
- ìì´í 59
- OS
- ìì´í 60
- Container
- BOJ
- ì´ìì²´ì
- ê·¸ëííì
- bruteforce
- ìì´
- springboot
- EffectiveJava
- subset
- IMAGE
- ì´íí°ë¸ìë°
- dfs
- DevOps
- docker-compose
