티스토리 뷰
https://www.acmicpc.net/problem/1707
DFS로 노드를 탐색해가면서 마킹표시를 해준다. 이전 노드와 색이 같으면 이분그래프가 아니라고 판정한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | #include <stdio.h> #define V 20050 #define E 200050 struct NODE { int node; struct NODE *next; }; NODE HEAD[V],POOL[E*2]; int t,n,m,u,v,cnt,ans,visit[V]; void init(int n) { cnt=0; ans=1; for(int i=1;i<=n;i++) { HEAD[i].next=NULL; visit[i]=0; } } void make(int u,int v) { NODE *node=&POOL[cnt++]; node->node=v; node->next=HEAD[u].next; HEAD[u].next=node; } void dfs(int n,int c) { if(ans==0) return; visit[n]=c; for(NODE *ptr=HEAD[n].next;ptr;ptr=ptr->next) { int node=ptr->node; if(visit[node]==c) { ans=0; return; } else if(visit[node]==0) dfs(node,3-c); } } int main() { scanf("%d",&t); while(t--) { scanf("%d %d",&n,&m); init(n); while(m--) { scanf("%d %d",&u,&v); make(v,u); make(u,v); } for(int i=1;i<=n;i++) if(visit[i]==0) dfs(i,1); printf("%s\n",ans?"YES":"NO"); } return 0; } | cs |
'Algorithm > BOJ' 카테고리의 다른 글
9536 여우는 어떻게 울지? (0) | 2019.09.26 |
---|---|
1620 나는야 포켓몬 마스터 이다솜 (0) | 2019.01.27 |
2606 바이러스 (0) | 2019.01.27 |
14003 가장 긴 증가하는 부분 수열 5 (0) | 2018.11.14 |
12015 가장 긴 증가하는 부분 수열 2 (0) | 2018.11.14 |