NYOJ - 1015 二部图(bfs/dfs)

题目链接:点我点我

题意:二分图判断问题

题解:两种解法,模拟下匹配过程。

 1 //二分图匹配dfs
 2 #include <cstring>
 3 #include <vector>
 4 #include <iostream>
 5 #include <algorithm>
 6 using namespace std;
 7
 8 const int N=11111;
 9 vector <int> E[N];
10 int col[N];
11
12 void init(){
13     memset(col,0,sizeof(col));
14     for(int i=0;i<N;i++) E[i].clear();
15 }
16
17 bool dfs(int v,int c){
18     col[v]=c;
19     for(int i=0;i<E[v].size();i++){
20         int tmp=E[v][i];
21         if(col[tmp]==c) return false;
22         if(col[tmp]==0&&!dfs(tmp,-c)) return false;
23     }
24     return true;
25 }
26
27 int main(){
28     int n,m,x,y;
29     while(cin>>n){
30         int idx=0;
31         init();
32         cin>>m;
33         for(int i=1;i<=m;i++){
34             cin>>x>>y;
35             E[x].push_back(y);
36             E[y].push_back(x);
37         }
38         if(!dfs(0,1)) cout<<"NOT BICOLORABLE."<<endl;
39         else cout<<"BICOLORABLE."<<endl;
40     }
41     return 0;
42 } 
 1 //二分图匹配bfs
 2 #include <queue>
 3 #include <cstring>
 4 #include <vector>
 5 #include <iostream>
 6 #include <algorithm>
 7 using namespace std;
 8
 9 const int N=11111;
10 vector <int> E[N];
11 int col[N];
12
13 void init(){
14     memset(col,0,sizeof(col));
15     for(int i=0;i<N;i++) E[i].clear();
16 }
17
18 bool bfs(int x){
19     col[x]=1;
20     queue <int> Q;
21     Q.push(x);
22     while(!Q.empty()){
23         int now=Q.front();Q.pop();
24         for(int i=0;i<E[now].size();i++){
25             int tmp=E[now][i];
26             int ctmp=col[now]==1?2:1;
27             if(col[tmp]==0){
28                 col[tmp]=ctmp;
29                 Q.push(tmp);
30             }
31             else if(col[tmp]!=ctmp) return false;
32         }
33     }
34     return true;
35 }
36
37 int main(){
38     int n,m;
39     while(cin>>n){
40         init();
41         int x,y;
42         cin>>m;
43         for(int i=1;i<=m;i++){
44             cin>>x>>y;
45             E[x].push_back(y);
46             E[y].push_back(x);
47         }
48         if(bfs(0)) cout<<"BICOLORABLE."<<endl;
49         else cout<<"NOT BICOLORABLE."<<endl;
50     }
51     return 0;
52 }        
时间: 2024-12-29 01:53:43

NYOJ - 1015 二部图(bfs/dfs)的相关文章

邻结矩阵的建立和 BFS,DFS;;

邻结矩阵比较简单,, 它的BFS,DFS, 两种遍历也比较简单,一个用队列, 一个用数组即可!!!但是邻接矩阵极其浪费空间,尤其是当它是一个稀疏矩阵的时候!!!---------------------------------------------------------------------------------------------------------------------------------------//邻接矩阵的建立和 其BFS, DFS, 遍历 #include <

HDU ACM 1044 Collect More Jewels BFS+DFS

题意:在一个迷宫中,有一些宝物,从起点走到终点,问在给定的时间内,到达终点后所能拾取珠宝的最大价值. 分析(BFS+DFS): 1.求入口到第一个取宝物的地方的最短距离 2.求第i个取宝物的地方到第i+1个取宝物的地方的最短距离 3.求第n个取宝物的地方到出口的最短距离 4.保证以上3点能在时间L内实现的情况下,取得的宝石价值最大. BFS特点:对于解决最短或最少问题特别有效,而且寻找深度小,但缺点是内存耗费量大(需要开大量的数组单元来存储状态) DFS特点:对于解决遍历和求所有问题有效,对于问

HDU 1253 胜利大逃亡 NYOJ 523【BFS】

胜利大逃亡 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 24608    Accepted Submission(s): 9427 Problem Description Ignatius被魔王抓走了,有一天魔王出差去了,这可是Ignatius逃亡的好机会. 魔王住在一个城堡里,城堡是一个A*B*C的立方体,可以被表示成A个B*C的

NYOJ 587 blockhouses 【DFS】

blockhouses 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 Suppose that we have a square city with straight streets. A map of a city is a square board with n rows and n columns, each representing a street or a piece of wall. A blockhouse is a small castle th

NYOJ 722 数独 【DFS】+【预处理】

数独 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 数独是一种运用纸.笔进行演算的逻辑游戏.玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行.每一列.每一个3*3宫内的数字均含1-9,不重复. 每一道合格的数独谜题都有且仅有唯一答案,推理方法也以此为基础,任何无解或多解的题目都是不合格的. 有一天hrdv碰到了一道号称是世界上最难的数独的题目,作为一名合格的程序员,哪能随随便便向困难低头,于是他决定编个程序来解决它.. 输入 第一行有一个

建图方式一 之 ”前向星“ BFS&amp;&amp;DFS 简单应用

三种建图方式,邻接矩阵.前向星(边表集).邻接链表! 耗时一晚上 ,好好研究了一下 前向星,因为我的指针用的实在是很烂,所以还是 入赘 前向星吧. 问了学长,看了大牛们的博客,终于有点收获了,个人认为 前向星Very Well. 前向星 建图方法: 以储存边的方式来储存图.在构造图时,把边存放在数组里,不需使用指针,只需一个 next  即可是整个图构建完成 . 适用条件: 点集特别多的稀疏图,边数多且繁杂,开邻接矩阵会浪费大量内存. 时间复杂度: O(m),并不比邻接链表差. #include

UVALive - 6455 Stealing Harry Potter&#39;s Precious (bfs+dfs)

https://cn.vjudge.net/problem/UVALive-6455 题目大意:题目上给出一个地图,其中@是人在地图上的出发点,#是墙,' . '是路.然后给出几个点,这些点表示财宝的所在地.问人是否能够得到所有的宝藏,如果能够的话给出所有的宝藏的最短的路径. 解题思路:由于只有最多4个宝藏所在地,所以只要用bfs找出出发点和财宝所在地距离到达其他点的步数.因为最多只有4个宝藏,所以可以暴力找出出发点到所有宝藏的最短距离. 暴力代码: 1 #include<stdio.h> 2

Collect More Jewels(hdu1044)(BFS+DFS)

Collect More Jewels Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 6857    Accepted Submission(s): 1592 Problem Description It is written in the Book of The Lady: After the Creation, the cruel

hdu 4771 Stealing Harry Potter&#39;s Precious (2013亚洲区杭州现场赛)(搜索 bfs + dfs) 带权值的路径

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4771 题目意思:'@'  表示的是起点,'#' 表示的是障碍物不能通过,'.'  表示的是路能通过的: 目的:让你从 '@' 点出发,然后每个点只能走一次,求出最小的距离: 解题思路:先用 bfs 求解出任意两点之间的距离,用 ans[i][j],表示点 i 到点  j 的距离: 然后用 dfs 递归求出从起点经过所有点的距离中,比较出最小的: AC代码: 1 #include<iostream>