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测试-图论的更多相关文章

  1. ACM-ICPC实验室20.2.21测试-图论(二)

    A.患者的编号 给出一个有向图,要求你输出字典序最小的拓扑排序. 常规拓扑排序是做不了的,正解是反向建图,同时用大根堆的优先队列维护,保证每次优先访问编号大的结点,再反向输出~ #include< ...

  2. 2019年安徽大学ACM/ICPC实验室新生赛(公开赛)D 不定方程

    题目链接:https://ac.nowcoder.com/acm/contest/2720/D 题意:对于 ax = by = c ,给出 x, y 求符合条件的 a, b, c 且 c 为最小的解, ...

  3. ACM-ICPC实验室20.2.22测试-动态规划

    C.田忌赛马 直接贪心做就可以~ #include<bits/stdc++.h> using namespace std; ; int a[maxn],b[maxn]; int main( ...

  4. 2015 ACM / ICPC 亚洲区域赛总结(长春站&北京站)

    队名:Unlimited Code Works(无尽编码)  队员:Wu.Wang.Zhou 先说一下队伍:Wu是大三学长:Wang高中noip省一:我最渣,去年来大学开始学的a+b,参加今年区域赛之 ...

  5. Problem 1002-2017 ACM/ICPC Asia Regional Shenyang Online

    网络赛:2017 ACM/ICPC Asia Regional Shenyang Online 题目来源:cable cable cable Problem Description: Connecti ...

  6. 【转】lonekight@xmu·ACM/ICPC 回忆录

    转自:http://hi.baidu.com/ordeder/item/2a342a7fe7cb9e336dc37c89 2009年09月06日 星期日 21:55 初识ACM最早听说ACM/ICPC ...

  7. 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 ...

  8. 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 ...

  9. Java in ACM/ICPC

    目录 Java在ACM/ICPC中的特点 在ACM/ICPC中使用Java需要注意的问题 Java与高精度计算 1.Java在ACM/ICPC中的特点 Java的语法和C++几乎相同 Java在执行计 ...

随机推荐

  1. 素问 - IC移仓换月

    摘自<小韭的学习圈> Q 股指期货的合约什么时候换月比较合适? 今天是1908股指期货的交割日,我是这么操作的:我在10:30分把IH1908以2827元卖出,然后马上以2805.8元买入 ...

  2. js - 子节点

    子节点数量:this.wdlgLossInfo.childNodes.length

  3. NlogN复杂度寻找数组中两个数字和等于给定值

    算法导论:22页2.3-7 描述一个运行时间为O(nlogn)的算法,找出n个元素的S数组中是否存在两个元素相加等于给定x值 AC解: a=[1,3,6,7,9,15,29] def find2sum ...

  4. 集成Log4Net到自己的Unity工程

    需要使用的插件库说明: Loxodon Framework Log4NetVersion: 1.0.0© 2016, Clark Yang=============================== ...

  5. 大数据-HBase

    HBase HBase(Hadoop Database)基于Google的BigTable论文,依赖HDFS进行存储.适合存储大体量数据.HBase是高可靠性(数据安全).高性能(存取效率).面向列. ...

  6. mysql(2):索引

    索引基础 索引介绍 定义 索引是满足某种特定查找算法的数据结构.这些数据结构会以某种方式指向数据,从而实现高效查找. 优势 提高了查询速度 劣势 降低更新表的速度,因为更新表时,MySQL不仅要保存数 ...

  7. pikachu练习平台(XSS-漏洞测试案例(cookie的窃取和利用、钓鱼攻击、XSS获取键盘记录))

    XSS-漏洞测试案例 xss案例 1.cookie的窃取和利用 2.钓鱼攻击 3.XSS获取键盘记录 在进行案例之前首先要搭建xss后台 搭建xss后台 1.在pikachu文件夹下面,把pkxss单 ...

  8. 测试理论 - Test Double

    概述 简述 test double mock, fake 之类的东西 背景 最近在看 google 软件测试之道 妈的 13 年的老书了 书里有提到 mock, fake, stub 刚好, 我又不太 ...

  9. 【游戏体验】Sift Heads World Act 1(暗杀行动1)

    >>>点此处可试玩无敌版<<< 注意,本游戏含有少量暴力元素,13岁以下的儿童切勿尝试本款游戏 非常良心的火柴人游戏,值得一玩 个人测评 游戏性 8/10 音乐 9 ...

  10. crontab实践

    1.crontab概要 2.crontab使用 3.关键配置信息 3.1如何配置定时任务 4.注意事项 参考 https://www.cnblogs.com/keithtt/p/6946498.htm ...