HDU --- 5961 传递 【思维 + bfs】
来源:互联网 发布:学生证办理 淘宝 编辑:程序博客网 时间:2024/06/02 06:43
传送门
//题意: 给你两幅图, 为是否都是竞赛图. 竞赛图的定义题目中给出了的.
//思路 : 比赛的时候没开 . 因为比赛想的是暴力, 不敢动. 下来看了下正解, 用bfs, 不可能会出现深度>=2的, 出现了就不是, 否则就是. 只能说想法太好了, 我怎么就想不到了. 太菜了…
//注意的就是如何简化代码量, 因为有两幅图, 但是最好只写一个bfs最好, 避免写的丑. 所以要多多学习!!!
我用的是一个二维二维vector, 这样每次改变下第二维的数字就行了.
AC Code
/** @cain*/const int maxn=2016+5;int n;char s[maxn][maxn];vector<int >v[maxn][2]; //0是一幅图, 1是一幅图. 这样代码量就会简化不少.bool vis[maxn];struct node{ int val,step; node(int val=0,int step=0):val(val),step(step){}};bool bfs(int x,int flag){ queue<node >q; q.push(node{x,0}); vis[x] = true; while(!q.empty()){ node tmp = q.front(); if(tmp.step>=2) return false; q.pop(); for(int i=0;i<v[tmp.val][flag].size();i++){ int to = v[tmp.val][flag][i]; if(vis[to]) continue; vis[to] = true; q.push(node{to,tmp.step+1}); } } return true;}void solve(){ scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%s",s[i]+1); for(int i=1;i<=n;i++){ v[i][0].clear(); v[i][1].clear(); } for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ if(s[i][j] == 'P') v[i][0].push_back(j); if(s[i][j] == 'Q') v[i][1].push_back(j); } } bool flag1,flag2; for(int i=1;i<=n;i++){ Fill(vis,false); flag1 = bfs(i,0); Fill(vis,false); flag2 = bfs(i,1); if(!flag1 || !flag2){ printf("N\n"); break; } } if(flag1 && flag2) printf("T\n");}
阅读全文
0 0
- HDU --- 5961 传递 【思维 + bfs】
- HDU 5961传递 思维 + bitset
- HDU 5961 传递 bfs乱搞
- HDU 5961 传递(BFS)
- HDU 5961 传递(BFS)
- HDU 5961 传递/Transitivity 【BFS+vector】
- hdu 4474 BFS+思维题
- HDU 5961 传递 图论 BFS (2016CCPC 合肥 A题)
- hdu 4101 Ali and Baba (bfs+严密思维)
- HDU 5961 bfs
- HDU 1704 Rank floyd求传递闭包 || bfs
- hdu 5961传递
- 图论 hdu 5961 传递
- HDU bfs
- HDU5961传递(思维)
- HDU5961 传递(bfs)
- hdu5961 传递(BFS)
- HDU3220逆向思维的BFS
- Linux (CentOS 7) 安装 mysql 5.7
- #20
- HDU 6165 FFF at Valentine
- FZU
- LINUX下常用解压与压缩
- HDU --- 5961 传递 【思维 + bfs】
- Sublime插件记录
- UML的九种图例详解
- 【mybatis】mybatis数据源源码剖析(JNDI、POOLED、UNPOOLED)
- Maven 生命周期
- 洛谷1082 同余方程
- Ubuntu 非root 权限(普通用户)安装OpenCV 2.4.9
- java基本类型、对应的包装类型(自动拆箱和自动装箱)
- 半饱是一种生活的的态度