Codeforces 475 B Strongly Connected City【DFS】

题意:给出n行m列的十字路口,<代表从东向西,>从西向东,v从北向南,^从南向北,问在任意一个十字路口是否都能走到其他任意的十字路口

四个方向搜,搜完之后,判断每个点能够访问的点的数目是否相同,相同的话则说明可以到达任意点

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include <cmath>
 5 #include<stack>
 6 #include<vector>
 7 #include<map>
 8 #include<set>
 9 #include<queue>
10 #include<algorithm>
11 #define mod=1e9+7;
12 using namespace std;
13
14 typedef long long LL;
15 const int INF = 0x7fffffff;
16 const int maxn=105;
17 char s1[maxn],s2[maxn];
18 int cnt[maxn][maxn],vis[maxn][maxn];
19 int n,m;
20
21 void dfs(int x,int y){
22     if(x<1||x>n||y<1||y>m) return;
23     if(vis[x][y]) return;
24     vis[x][y]=1;
25     cnt[x][y]++;
26     if(s1[x]==‘>‘) dfs(x,y+1);
27     if(s1[x]==‘<‘) dfs(x,y-1);
28     if(s2[y]==‘v‘) dfs(x+1,y);
29     if(s2[y]==‘^‘) dfs(x-1,y);
30 }
31
32 int main(){
33     int i,j;
34     scanf("%d %d",&n,&m);
35     cin>>(s1+1);
36     cin>>(s2+1);
37
38
39     memset(cnt,0,sizeof(cnt));
40
41     for(i=1;i<=n;i++){
42         for(j=1;j<=m;j++){
43                 memset(vis,0,sizeof(vis));
44                 dfs(i,j);
45         }
46     }
47
48     //for(i=1;i<=n;i++){
49     //    for(j=1;j<=m;j++)
50     //    printf("cnt[%d][%d]=%d\n",i,j,cnt[i][j]);
51     //}
52
53     for(i=1;i<=n;i++){
54         for(j=1;j<=m;j++){
55             if(cnt[i][j]!=cnt[1][1]){
56                 printf("NO\n");
57                 return 0;
58             }
59         }
60     }
61
62     printf("YES\n");
63     return 0;
64 }

后来搜题解发现还有用强连通分量做的,还有用floyd做的= =

时间: 2024-10-10 17:44:28

Codeforces 475 B Strongly Connected City【DFS】的相关文章

Codeforces 510B Fox And Two Dots 【DFS】

好久好久,都没有写过搜索了,看了下最近在CF上有一道DFS水题 = = 数据量很小,爆搜一下也可以过 额外注意的就是防止往回搜索需要做一个判断. Source code: //#pragma comment(linker, "/STACK:16777216") //for c++ Compiler #include <bits/stdc++.h> #define Max(a,b) (((a) > (b)) ? (a) : (b)) #define Min(a,b) (

codeforces 750D New Year and Fireworks【DFS】

题意:烟花绽放时分为n层,每层会前进ti格,当进入下一层是向左右45°分开前进. 问在网格中,有多少网格至少被烟花经过一次? 题解:最多30层,每层最多前进5格,烟花的活动半径最大为150,每一层的方向都可以由上一层决定,所以一定 小于300*300中情况,直接暴力绽放的过程就行了.bfs和dfs都可以做. dfs: #include<stdio.h> #include<iostream> #include<math.h> #include<algorithm&g

Codeforces 445 A DZY Loves Chessboard【DFS】

题意:给出n*m的棋盘,在‘.’处放上B或者W,最后要求所有的B和W都不相邻 先把棋盘的点转化成‘B’,再搜,如果它的四周存在‘B’,则将它变成'W' 一直挂在第五个数据的原因是,没有dfs(nx,ny) 搜索果断弱爆了= =(差不多写了一个小时) 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include <cmath> 5 #include<stack> 6 #

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

HDU1045 Fire Net 【DFS】

Fire Net Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 6285    Accepted Submission(s): 3552 Problem Description Suppose that we have a square city with straight streets. A map of a city is a

hdu 5352 MZL&#39;s City 【二分图】

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5352 题意: 给你n,m,k 表示n个建筑 m次操作,修复操作每次最多修复k个建筑. 有三种操作 1.修复x点周围建筑(<=k) 2.x,y建筑间建边 3.x,y间删边 修复建筑时候拆点建图.反着求最大匹配,保证字典序最小. 代码: #include <stdio.h> #include <ctime> #include <math.h> #include <l

POJ2230 Watchcow 【欧拉回路】+【DFS】

Watchcow Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 5964   Accepted: 2561   Special Judge Description Bessie's been appointed the new watch-cow for the farm. Every night, it's her job to walk across the farm and make sure that no ev

poj 3009 Curling 2.0 【DFS】

题意:从2出发,要到达3, 0可以通过,碰到1要停止,并且1处要变成0, 并且从起点开始沿着一个方向要一直前进,直至碰到1(或者3)处才能停止,(就是反射来反射去知道反射经过3).如果反射10次还不能到达3,就输出-1. 策略:深搜. 易错点,方向不容易掌握,并且,出题人把n, m顺序反了. 代码: #include<stdio.h> #include<string.h> int map[25][25]; int ans, n, m; const int dir[4][2] = {

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

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