题目链接:http://codeforces.com/problemset/problem/475/B
题目的意思是,给你n条水平固定流向,和m条竖直固定流向的街道,他们互相交叉在一起。。问任意交叉点能不能互相到达。。如下图:
在这里,我们知道,每条路的流向都是已知的。。
那么我们只需要判断外环路能否成环就可以了。。
如果外环路可以成环,那么的话,任意两点就可以到达。否则的话,就不能够。
为什么这么说呢??
因为如果外环路成环了,那么,任意点就可以先走到外环路上,然后,再走到你想要的其他的节点上。。这一点是一定可以的。。
那么怎么判断外环路成环呢?判断四角可达即可。。
Code:
#include <iostream> #include <algorithm> #include <cstdio> #include <cstring> #include <cmath> #include <string> using namespace std; #define INT unsigned long long int main() { int n, m; cin >> n >> m; string h, v; cin >> h >> v; bool flag = true; if(h[0] == '>' && v[0] == 'v') flag = false; if(h[0] == '<' && v[m - 1] == 'v') flag = false; if(h[n - 1] == '>' && v[0] == '^') flag = false; if(h[n - 1] == '<' && v[m - 1] == '^') flag = false; // if(v[0] == v[m - 1]) flag = false; if(flag) puts("YES"); else puts("NO"); return 0; }
一个好的想法是非常的重要的!!