ACM-ICPC实验室20.2.19测试-图论
B.Harborfan的新年拜访Ⅱ
就是一道tarjan缩点的裸题。
建图比较麻烦
以后遇到这种建图,先用循环把样例实现出来,再对着循环写建图公式
#include<bits/stdc++.h>
using namespace std;
const int maxn=;
vector<int> g[maxn];
string s1,s2;
int N,M;
int low[maxn];
int dfn[maxn];
int pos[maxn];
stack<int> st;
int scc;
int cnt;
void tarjan (int x) {
low[x]=dfn[x]=++cnt;
st.push(x);
for (int i=;i<g[x].size();i++) {
if (!low[g[x][i]]) {
tarjan(g[x][i]);
low[x]=min(low[x],low[g[x][i]]);
}
else if (!pos[g[x][i]])low[x]=min(low[x],dfn[g[x][i]]);
}
if (low[x]==dfn[x]) {
scc++;
while () {
int u=st.top();
st.pop();
low[u]=low[x];
pos[u]=scc;
if (u==x) break;
}
}
}
int main () {
scanf ("%d %d",&N,&M);
cin>>s1>>s2;
/*for (int i=2;i<=6;i++) g[i].push_back(i-1);
for (int i=8;i<=12;i++) g[i-1].push_back(i);
for (int i=14;i<=18;i++) g[i].push_back(i-1);
for (int i=20;i<=24;i++) g[i-1].push_back(i);
for (int i=7;i<=19;i+=6) g[i-6].push_back(i);
for (int i=8;i<=20;i+=6) g[i].push_back(i-6);
for (int i=9;i<=21;i+=6) g[i-6].push_back(i);
for (int i=10;i<=22;i+=6) g[i].push_back(i-6);
for (int i=11;i<=23;i+=6) g[i-6].push_back(i);
for (int i=12;i<=24;i+=6) g[i].push_back(i-6); */
for (int i=;i<s1.length();i++) {
for (int j=i*M+;j<=(i+)*M;j++) {
if (s1[i]=='>') g[j-].push_back(j);
else g[j].push_back(j-);
}
}
for (int i=;i<s2.length();i++) {
for (int j=M+i+;j<=M*(N-)++i;j+=M) {
if (s2[i]=='v') g[j-M].push_back(j);
else g[j].push_back(j-M);
}
}
for (int i=;i<=N*M;i++) if (!low[i]) tarjan(i);
//printf ("%d\n",scc);
if (scc==) printf ("YES");
else printf ("NO");
return ;
}
E.
爆搜即可,需要注意的是,一个单位代表四面墙,每一次爆搜,把搜到的点记录下来,之后询问就直接输出答案,避免tle~
#include<bits/stdc++.h>
using namespace std;
const int maxn=;
string s[maxn];
int g[maxn][maxn];
int N,M,K;
struct node {
int x,y;
};
int X[]={,,-,};
int Y[]={,,,-};
int visit[maxn][maxn];
int visit1[maxn][maxn][];
int q1[maxn][maxn];
int judge (int x,int y) {
if (x<||x>N||y<||y>M) return ;
return ;
}
int bfs (int x,int y,int z) {
queue<node> q;
q.push({x,y});
memset(visit,,sizeof(visit));
memset(visit1,,sizeof(visit1));
visit[x][y]=;
int ans=;
q1[x][y]=z;
while (!q.empty()) {
node u=q.front();
q.pop();
for (int i=;i<;i++) {
int tx=u.x+X[i];
int ty=u.y+Y[i];
if (!judge(tx,ty)) continue;
if (visit[tx][ty]) continue;
if (visit1[tx][ty][i]) continue;
if (g[tx][ty]==) {
q.push({tx,ty});
visit[tx][ty]=;
q1[tx][ty]=z;
continue;
}
if (g[tx][ty]==) {
ans++;
visit1[tx][ty][i]=;
}
}
}
return ans;
}
int ans[maxn*];
int main () {
scanf ("%d %d %d",&N,&M,&K);
for (int i=;i<=N;i++) cin>>s[i];
for (int i=;i<=N;i++) {
for (int j=;j<s[i].length();j++) {
g[i][j+]=s[i][j]=='.'?:;
}
}
int x,y;
for (int i=;i<K;i++) {
scanf ("%d %d",&x,&y);
if (q1[x][y]) {
printf ("%d\n",ans[q1[x][y]]);
continue;
}
ans[i+]=bfs(x,y,i+);
printf ("%d\n",ans[i+]);
}
return ;
}
ACM-ICPC实验室20.2.19测试-图论的更多相关文章
- ACM-ICPC实验室20.2.21测试-图论(二)
A.患者的编号 给出一个有向图,要求你输出字典序最小的拓扑排序. 常规拓扑排序是做不了的,正解是反向建图,同时用大根堆的优先队列维护,保证每次优先访问编号大的结点,再反向输出~ #include< ...
- 2019年安徽大学ACM/ICPC实验室新生赛(公开赛)D 不定方程
题目链接:https://ac.nowcoder.com/acm/contest/2720/D 题意:对于 ax = by = c ,给出 x, y 求符合条件的 a, b, c 且 c 为最小的解, ...
- ACM-ICPC实验室20.2.22测试-动态规划
C.田忌赛马 直接贪心做就可以~ #include<bits/stdc++.h> using namespace std; ; int a[maxn],b[maxn]; int main( ...
- 2015 ACM / ICPC 亚洲区域赛总结(长春站&北京站)
队名:Unlimited Code Works(无尽编码) 队员:Wu.Wang.Zhou 先说一下队伍:Wu是大三学长:Wang高中noip省一:我最渣,去年来大学开始学的a+b,参加今年区域赛之 ...
- Problem 1002-2017 ACM/ICPC Asia Regional Shenyang Online
网络赛:2017 ACM/ICPC Asia Regional Shenyang Online 题目来源:cable cable cable Problem Description: Connecti ...
- 【转】lonekight@xmu·ACM/ICPC 回忆录
转自:http://hi.baidu.com/ordeder/item/2a342a7fe7cb9e336dc37c89 2009年09月06日 星期日 21:55 初识ACM最早听说ACM/ICPC ...
- hduoj 4715 Difference Between Primes 2013 ACM/ICPC Asia Regional Online —— Warmup
http://acm.hdu.edu.cn/showproblem.php?pid=4715 Difference Between Primes Time Limit: 2000/1000 MS (J ...
- hduoj 4712 Hamming Distance 2013 ACM/ICPC Asia Regional Online —— Warmup
http://acm.hdu.edu.cn/showproblem.php?pid=4712 Hamming Distance Time Limit: 6000/3000 MS (Java/Other ...
- Java in ACM/ICPC
目录 Java在ACM/ICPC中的特点 在ACM/ICPC中使用Java需要注意的问题 Java与高精度计算 1.Java在ACM/ICPC中的特点 Java的语法和C++几乎相同 Java在执行计 ...
随机推荐
- jqGrid colModel 参数(来自中文手册)
jqGrid colModel 参数 ColModel 是jqGrid里最重要的一个属性,设置表格列的属性. 属性 数据类型 备注 默认值 align string left, center, rig ...
- codeforces 1285D. Dr. Evil Underscores(字典树)
链接:https://codeforces.com/problemset/problem/1285/D 题意:给n个数a1,a2,a3.....an,找到一个数X,使得X 异或所有的ai ,得到的ma ...
- 堆(Heap)和栈(Stack)
详细可以查看这篇文章:https://www.cnblogs.com/qingtianMo/p/5255121.html 栈保存代码执行(调用)的路径,堆负责保存对象(数据) 栈相当于摞盒子,进入一个 ...
- MYSQL之路之表
- goland 2019.1.1破解
https://blog.csdn.net/hi_liuxiansheng/article/details/89078405
- 2. 移动端测试工具 :bugtags
http://blog.csdn.net/objectivepla/article/details/51037804 Bugtags 使用说明 https://www.bugtags.com/ ...
- SpringMVC-时间类型转换
在上一篇SpringMVC的提交表单中,我们使用的日期为String型,可以将日期转换为Date型,然后使用initBinder函数进行显示,具体代码如下: (1)首先更改User.java的birt ...
- 【原】mac电脑保存服务器账号/密码登录操作
一.说明 mac电脑自带终端神奇iterm2,日常登录服务器操作一般场景为ssh user@ip,确认后再输入密码操作. 该操作较为麻烦且需通过hostname判断所在主机. 通过ssh生成秘钥方式较 ...
- SQL Server中使用msdb数据库的存储过程sp_delete_backuphistory和sp_delete_database_backuphistory来删除备份和恢复历史数据
根据微软文档对sp_delete_backuphistory存储过程的介绍,SQL Server在每次备份和恢复数据库后,会向msdb系统数据库的备份和恢复历史表写入数据,如果SQL Server经常 ...
- Linux - Shell - find - 进阶: 范围
概述 继续昨天的 find 背景 还有一些 过滤条件 1. 约束: 目录层数 概述 约束目录的层级 选项 -maxdepth 作用 约束最大目录层级 相对路径 -mindepth 作用 约束最小目录层 ...